对我来说使用Moq,我的所有类都必须实现一个接口吗?

mrb*_*lah 5 nhibernate nunit unit-testing moq

我想使用Moq,但我使用的是Nhibernate而且我没有为我的所有Model类(POCO类)创建接口.

我是否必须为每个类创建一个接口,以便能够使用我的POCO类?

Fin*_*las 8

您可以模拟虚拟方法,但如果使用接口则最好.

我说的原因如下:

var mockObject = new Mock<IMyObject>();
Run Code Online (Sandbox Code Playgroud)

如果您使用虚拟方法,它将变为:

var mockObject = new Mock<MyObject>(params...);
Run Code Online (Sandbox Code Playgroud)

你是被迫包括混凝土对象的参数,但你显然不需要为接口.如果您决定在以后更改类的构造函数,则使用具体类的所有测试都需要更新.我过去曾被这个烧过,所以尽量不再使用虚拟方法进行测试.

我应该通过尝试模拟具体类型来补充你正在挫败模拟框架的目的.你应该嘲笑角色,而不是类型.因此,在抽象中工作,在这种情况下,接口是一件好事.

另一个原因是接口如何工作,接口陈述合同而不是行为.当您有多个实现时,应该使用它们,并且我将测试作为行为进行分类,因此是引入新接口的正当理由.