我最近做了很多单元测试,并且我从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
关键字来创建新的类实例?
答案 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)
创建一个实际对象的模拟对我来说毫无意义。