[英]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.