Moq Mock.Of <obj> vs new Obj();

时间:2017-09-26 07:20:41

标签: c# nunit tdd moq

我最近做了很多单元测试,并且我从Mock.Of<T>库中发现了Moq方法。在阅读this并最终that之后,我发现Mock.Of是创建模拟界面实例的绝佳选择,但是我可以通过{{1}自行反对的常规类怎么样?关键字?一些new教程使用了这种方法,这对我来说很困惑,因为我觉得它没有任何用处。

Nunit

这两个对象有什么区别吗?在这种情况下, Person newPerson = new Person() { Name = "David", Surname = "Smith" }; Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith"); 有任何优势,还是应该使用常规Mock.Of关键字来创建新的类实例?

1 个答案:

答案 0 :(得分:2)

我认为你展示的代码完全忽略了嘲弄的重点。 模拟应该适用于接口和抽象类,因此您不必创建实际对象。或者你创建一个对象的模拟

因此,您可以执行Mock.Of<Person>然后分配测试中所需的一些值,但是您不做的是先创建对象并进行设置,然后创建它的模拟。

假设你有这样的代码:

public interface IPerson
{
     some method and property signatures
}

然后你有

public class Person : IPerson
{ 
    some code here
}

现在假设您有一个将IPerson作为参数

的方法

然后你可以做类似的事情:

var mockedPerson = Mock.Of<IPerson>();
mockedPerson.Age = 27;

int age = GetAge(mockedPerson);
Assert.AreEqual(age, 27)

创建一个实际对象的模拟对我来说毫无意义。