NSubstitute完全手冊(十)清理已收到的呼叫

weixin_34402090發表於2013-05-22

通過使用 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 完全手冊

相關文章