且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何断言一个动作被称为

更新时间:2021-09-15 08:39:28

您的实际测试这行代码:

You are actually testing this line of code:

dispatcher.Invoke(() => dialogService.Prompt(message));

您类调用模拟调用另一个模拟的方法。这通常是简单的,你只需要确保调用时调用正确的参数。不幸的是,该参数是一个lambda并没有那么容易评估。但幸运的是,这是这使得它再次轻松模拟的呼叫:只需要调用它,并确认其他模拟了所谓的:

Your class calls the mock to invoke a method on another mock. This is normally simple, you just need to make sure that Invoke is called with the correct arguments. Unfortunately, the argument is a lambda and not so easy to evaluate. But fortunately, it is a call to the mock which makes it easy again: just call it and verify that the other mock had been called:

Action givenAction = null;
mockDipatcher
  .AssertWasCalled(x => x.Invoke(Arg<Action>.Is.Anything))
  // get the argument passed. There are other solutions to achive the same
  .WhenCalled(call => givenAction = (Action)call.Arguments[0]);

// evaluate if the given action is a call to the mocked DialogService   
// by calling it and verify that the mock had been called:
givenAction.Invoke();
mockDialogService.AssertWasCalled(x => x.Prompt(message));