NSubstitute:Substitute.For <>和Substitute.ForPartsOf之间的区别

sch*_*her 5 c# nsubstitute

我正在使用NSubstitute.我必须伪造一个班级,不能挖出Substitute.For<...>()和的差别Substitute.ForPartsOf<...>.我已经阅读了文档,但没有明白这两点,两者的表现不同.

Paw*_*aga 10

Substitute.For <>()创建完整的模拟,而Substitute.ForPartsOf <>创建部分模拟.例如:

[Test]
public void Test()
{
    var person = Substitute.For<Person>();
    person.GetAge().Returns(20);
    var age = person.GetAge(); //returns 20
    var name = person.GetName(); //returns empty string

    var partialPerson = Substitute.ForPartsOf<Person>();
    partialPerson.GetAge().Returns(20);
    var age2 = partialPerson.GetAge(); //returns 20
    var name2 = partialPerson.GetName(); //returns John
}

public class Person
{
    public string Name { get; } = "John";
    public int Age { get; } = 10;

    public virtual int GetAge()
    {
        return Age;
    }

    public virtual string GetName()
    {
        return Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

一般来说,ForPartsOf <>如果没有被替换,将使用具体实现.