Moq测试无效方法

嗨,我是Moq测试的新手,并且很难做一个简单的断言。 我正在使用界面

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

IAdd接口的Moq是:

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

由于add方法为void,因此它不会向Assert with返回任何值。 我该如何断言这个设置?

为什么要使用模拟? 它用于validationSUT(被测系统)是否与其依赖项(应该被模拟)正确交互。 正确的交互意味着使用正确的参数调用正确的依赖成员

永远不应断言mock返回的值 。 这是与生产代码无关的虚拟值。 您应该断言的唯一值是SUT返回的值。 SUT是唯一应该为其编写断言的东西。

你也不应该测试接口 。 因为没有什么可以测试的。 接口只是一个API描述。 它没有实现。 那么,停下来想想你在这里测试的代码是什么? 这是一个在您的应用程序中执行的真实代码吗?

因此,您应该仅为测试使用IAdd接口的对象模拟IAdd接口。

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

 var mockAdd = new Mock(); mockAdd.Setup(x => x.Add(1, 2)).Verifiable(); //do something here what is using mockAdd.Add mockAdd.VerifyAll();