NSubstitute完全手册(十)清理已收到的调用

通过使用 ClearReceivedCalls() 扩展方法,可以使替代实例忘记先前的所有调用。

比如说我们有一个 ICommand 接口,我们想让 OnceOffCommandRunne r接收一个 ICommand 然后仅执行一次。

 1     public interface ICommand
 2     {
 3       void Execute();
 4     }
 5 
 6     public class OnceOffCommandRunner
 7     {
 8       ICommand command;
 9       public OnceOffCommandRunner(ICommand command)
10       {
11         this.command = command;
12       }
13       public void Run()
14       {
15         if (command == null) return;
16         command.Execute();
17         command = null;
18       }
19     }

如果我们为 ICommand 创建替代,则我们可以其在第一运行时即被调用,然后忘记之前的所有调用,之后再确定其没有被再次调用。

 1     [TestMethod]
 2     public void Test_ClearReceivedCalls_ForgetPreviousCalls()
 3     {
 4       var command = Substitute.For<ICommand>();
 5       var runner = new OnceOffCommandRunner(command);
 6 
 7       // 第一次运行
 8       runner.Run();
 9       command.Received().Execute();
10 
11       // 忘记前面对command的调用
12       command.ClearReceivedCalls();
13 
14       // 第二次运行
15       runner.Run();
16       command.DidNotReceive().Execute();
17     }

ClearReceivedCalls() 不会清理通过 Returns() 为替代实例设定的返回值。如果我们需要这么做,则可通过再次调用 Returns() 来替换之前指定的值的方式来进行。

NSubstitute 完全手册

posted @ 2013-05-22 10:37  sangmado  阅读(1273)  评论(0编辑  收藏  举报