Moq Mock.Of<Obj> vs new Obj();
Moq Mock.Of<Obj> vs new Obj();
我最近做了很多单元测试,我发现了 Moq
库中的 Mock.Of<T>
方法。阅读 this and ultimately that 后,我发现 Mock.Of
是创建模拟接口实例的绝佳选择,但是我可以通过 new
关键字自己创建对象的常规 classes 呢?一些 Nunit
教程使用了这种方法,这让我感到困惑,因为我发现它没有任何用处。
Person newPerson = new Person() { Name = "David", Surname = "Smith" };
Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith");
这两个对象有什么区别吗?在这种情况下 Mock.Of
有任何优势,或者我应该使用常规 new
关键字来创建 class 的新实例吗?
我认为您展示的代码完全没有抓住模拟的重点。
模拟应该在接口和抽象 类 上工作,因此您不必创建实际对象。或者你创建一个对象的模拟
因此,您可以 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)
创建实际对象的模拟对我来说毫无意义。
我最近做了很多单元测试,我发现了 Moq
库中的 Mock.Of<T>
方法。阅读 this and ultimately that 后,我发现 Mock.Of
是创建模拟接口实例的绝佳选择,但是我可以通过 new
关键字自己创建对象的常规 classes 呢?一些 Nunit
教程使用了这种方法,这让我感到困惑,因为我发现它没有任何用处。
Person newPerson = new Person() { Name = "David", Surname = "Smith" };
Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith");
这两个对象有什么区别吗?在这种情况下 Mock.Of
有任何优势,或者我应该使用常规 new
关键字来创建 class 的新实例吗?
我认为您展示的代码完全没有抓住模拟的重点。 模拟应该在接口和抽象 类 上工作,因此您不必创建实际对象。或者你创建一个对象的模拟
因此,您可以 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)
创建实际对象的模拟对我来说毫无意义。