日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NSubstitute完全手册(一)入门基础

發布時間:2023/12/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NSubstitute完全手册(一)入门基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NSubstitute入門

最簡單的入門方式就是創建一個測試項目,并將 NSubstitute 引用到其中。可以通過 NuGet 或 OpenWrap 來獲取 NSubstitute 包。也可以直接下載 NSubstitute 文件,然后將 NSubstitute.dll 引用到項目中。

然后就可以創建一個新的測試 Fixture(可以選擇使用你最喜歡的UT測試框架,本文涉及的示例中我們使用MSTest),開始思考從哪里入手。

首先,添加 using NSubstitute; 到當前的C#代碼文件中,有了它我們就可以開始創建替身了。

現在,比如我們有一個非常簡單的計算器接口:

1 public interface ICalculator 2 { 3 int Add(int a, int b); 4 string Mode { get; set; } 5 event EventHandler PoweringUp; 6 }

我們可以讓NSubstitute來創建類型實例的替代實例。可以創建諸如 Stub、Mock、Fake、Spy、Test Double 等,但當我們只是想要一個能有一定程度控制的替代實例時,為什么我們要困擾于此呢?

1 [TestMethod] 2 public void Test_GetStarted_GetSubstitute() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 }

現在,我們可以告訴被創建的替代實例,當方法被調用時返回一個值:

1 [TestMethod] 2 public void Test_GetStarted_ReturnSpecifiedValue() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 calculator.Add(1, 2).Returns(3); 6 7 int actual = calculator.Add(1, 2); 8 Assert.AreEqual<int>(3, actual); 9 }

我們可以檢查該替代實例是否接收到了一個指定的調用,或者未收到某指定調用:

1 [TestMethod] 2 public void Test_GetStarted_ReceivedSpecificCall() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 calculator.Add(1, 2); 6 7 calculator.Received().Add(1, 2); 8 calculator.DidNotReceive().Add(5, 7); 9 }

如果 Received() 斷言失敗,NSubstitute 會嘗試給出有可能是什么問題:

1 [TestMethod] 2 [ExpectedException(typeof(ReceivedCallsException))] 3 public void Test_GetStarted_DidNotReceivedSpecificCall() 4 { 5 ICalculator calculator = Substitute.For<ICalculator>(); 6 calculator.Add(5, 7); 7 8 calculator.Received().Add(1, 2); 9 } Expected to receive a call matching:Add(1, 2) Actually received no matching calls. Received 1 non-matching call (non-matching arguments indicated with '*' characters):Add(*5*, *7*)

我們也可以對屬性使用與方法類似的 Retures() 語法,或者繼續使用簡單的屬性 setter 來設置返回值。

1 [TestMethod] 2 public void Test_GetStarted_SetPropertyValue() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 6 calculator.Mode.Returns("DEC"); 7 Assert.AreEqual<string>("DEC", calculator.Mode); 8 9 calculator.Mode = "HEX"; 10 Assert.AreEqual<string>("HEX", calculator.Mode); 11 }

NSubstitute 支持參數匹配功能,可以設置參數規則,并斷言判斷是否接收到參數匹配的調用。

1 [TestMethod] 2 public void Test_GetStarted_MatchArguments() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 6 calculator.Add(10, -5); 7 8 calculator.Received().Add(10, Arg.Any<int>()); 9 calculator.Received().Add(10, Arg.Is<int>(x => x < 0)); 10 }

我們也可以在使用參數匹配功能的同時,傳遞一個函數給 Returns() ,以此來使替代實例具有更多的功能。

1 [TestMethod] 2 public void Test_GetStarted_PassFuncToReturns() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 calculator 6 .Add(Arg.Any<int>(), Arg.Any<int>()) 7 .Returns(x => (int)x[0] + (int)x[1]); 8 9 int actual = calculator.Add(5, 10); 10 11 Assert.AreEqual<int>(15, actual); 12 }

Returns() 也可通過構造一個返回值序列來指定多個參數。

1 [TestMethod] 2 public void Test_GetStarted_MultipleValues() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 calculator.Mode.Returns("HEX", "DEC", "BIN"); 6 7 Assert.AreEqual<string>("HEX", calculator.Mode); 8 Assert.AreEqual<string>("DEC", calculator.Mode); 9 Assert.AreEqual<string>("BIN", calculator.Mode); 10 }

最后,我們可以在替代實例上引發事件通知:

1 [TestMethod] 2 public void Test_GetStarted_RaiseEvents() 3 { 4 ICalculator calculator = Substitute.For<ICalculator>(); 5 bool eventWasRaised = false; 6 7 calculator.PoweringUp += (sender, args) => 8 { 9 eventWasRaised = true; 10 }; 11 12 calculator.PoweringUp += Raise.Event(); 13 14 Assert.IsTrue(eventWasRaised); 15 }

基本上這些就是入門 NSubstitute 的全部內容。對于更詳細的功能說明,以及一些 NSubstitute 所支持的不太常用的需求,請繼續閱讀。

NSubstitute 完全手冊

  • (一)入門基礎
  • (二)創建替代實例
  • (三)設置返回值
  • (四)為特定參數設置返回值
  • (五)為任意參數設置返回值
  • (六)使用函數設置返回值
  • (七)設置多個返回值
  • (八)替換返回值
  • (九)檢查接收到的調用
  • (十)清理已收到的調用
  • (十一)參數匹配器
  • (十二)使用回調函數和WhenDo語法
  • (十三)拋出異常
  • (十四)引發事件
  • (十五)自動遞歸模擬
  • (十六)設置out和ref參數
  • (十七)參數匹配器上的操作
  • (十八)檢查調用順序

總結

以上是生活随笔為你收集整理的NSubstitute完全手册(一)入门基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。