簡體   English   中英

Moq測試無效方法

[英]Moq testing void method

嗨,我是Moq測試新手,很難做一個簡單的斷言。 我正在使用界面

 public interface IAdd
 {
     void add(int a, int b);
 }

IAdd接口的Moq是:

  Mock<IAdd> mockadd = new Mock<IAdd>();
  mockadd.Setup(x => x.add(It.IsAny<int>(), It.IsAny<int>()).callback((int a, int b) => { a+b;});
  IAdd testing = mockadd.Object;

由於add方法為void,因此它不會向Assert返回任何值。 我該如何斷言這個設置?

為什么要使用模擬? 它用於驗證SUT(被測系統)是否與其依賴項(應該被模擬)正確交互。 正確的交互意味着使用正確的參數調用正確的依賴成員

永遠不應斷言mock返回的值 這是與生產代碼無關的虛擬值。 您應該斷言的唯一值是SUT返回的值。 SUT是唯一應該為其編寫斷言的東西。

你也不應該測試接口 因為沒有什么可以測試的。 接口只是一個API描述。 它沒有實施。 那么,停下來想想你在這里測試的代碼是什么? 這是一個在您的應用程序中執行的真實代碼嗎?

所以,你應該嘲笑IAdd接口僅適用於使用測試對象IAdd接口。

更好地提供更多上下文,但通常使用如下:

var mockAdd = new Mock<IAdd>();
mockAdd.Setup(x => x.Add(1, 2)).Verifiable();

//do something here what is using mockAdd.Add

mockAdd.VerifyAll();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM