您好我是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返回任何值。我该如何断言这个设置?
答案 0 :(得分:20)
为什么要使用模拟?它用于验证SUT(被测系统)是否与其依赖项(应该被模拟)正确交互。正确的交互意味着使用正确的参数调用正确的依赖成员。
你应该永远不会断言模拟返回的值。这是与生产代码无关的虚拟值。您应该断言的唯一值是SUT返回的值。 SUT是唯一应该为其编写断言的东西。
此外,您应该从不测试接口。因为没有什么可以测试的。接口只是一个API描述。它没有实施。那么,停下来想想你在这里测试的代码是什么?这是一个在您的应用程序中执行的真实代码吗?
因此,您应该仅为测试使用IAdd
接口的对象模拟IAdd
接口。
答案 1 :(得分:17)
最好提供更多上下文,但通常使用如下:
var mockAdd = new Mock<IAdd>();
mockAdd.Setup(x => x.Add(1, 2)).Verifiable();
//do something here what is using mockAdd.Add
mockAdd.VerifyAll();