代码之家  ›  专栏  ›  技术社区  ›  erexo

Moq模拟。Of<Obj>vs new Obj();

  •  1
  • erexo  · 技术社区  · 7 年前

    我最近做了很多单元测试,发现了 Mock.Of<T> 方法来自 Moq 图书馆阅读后 this 最终 that Mock.Of 对于创建模拟接口实例来说,这是一个很好的选择,但对于我可以自己创建对象的常规类呢 new Nunit 教程使用这种方法,这让我感到困惑,因为我觉得它在任何方面都没有用处。

        Person newPerson = new Person() { Name = "David", Surname = "Smith" };
        Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith");
    

    这两个物体之间有什么区别吗?在这种情况下 有什么优势吗?还是我应该用常规的 关键字来创建类的新实例?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Andrei Dragotoniu    7 年前

    模拟应该适用于接口和抽象类,因此您不必创建实际的对象。要么这样,要么创建对象的模拟

    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)
    

    创建实际对象的模拟对我来说没有任何意义。