NSubstitute: Difference between Substitute.For<> and S

本文关键字:lt and gt For Difference between Substitute NSubstitute | 更新日期: 2023-09-27 17:54:41

我使用NSubstitute。我不得不去上一堂课,无法找出Substitute.For<...>()Substitute.ForPartsOf<...>的区别。我已经阅读了文档,但不明白,两者的行为不同。

NSubstitute: Difference between Substitute.For<> and S

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;
    }
}

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