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() 来替换之前指定的值的方式来进行。