通过使用 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 完全手册
- (一)入门基础
- (二)创建替代实例
- (三)设置返回值
- (四)为特定参数设置返回值
- (五)为任意参数设置返回值
- (六)使用函数设置返回值
- (七)设置多个返回值
- (八)替换返回值
- (九)检查接收到的调用
- (十)清理已收到的调用
- (十一)参数匹配器
- (十二)使用回调函数和WhenDo语法
- (十三)抛出异常
- (十四)引发事件
- (十五)自动递归模拟
- (十六)设置out和ref参数
- (十七)参数匹配器上的操作
- (十八)检查调用顺序
本文转自匠心十年博客园博客,原文链接:http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_clearing_received_calls.html,如需转载请自行联系原作者