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)

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