NSubstitute:模拟属性

Pio*_*r X 5 c# unit-testing mocking nsubstitute

我在单元测试中创建了替代品Person和类。AddressBook该类包含类型和名称AddressBook的属性: 。PersonSamplePerson

public interface IAddressBook
{
    Person SamplePerson { get; set; }
}

public class AddressBook : IAddressBook
{
    public Person SamplePerson { get; set; }

    public AddressBook(Person samplePerson)
    {
        SamplePerson = samplePerson;
    }
}

public interface IPerson
{
    string GetName(string name);
}

public class Person : IPerson
{
    public string GetName(string name)
    {
        return name;
    }
}

public void TestMethod1()
{
    var personMock = Substitute.For<IPerson>();
    var addressBookMock = Substitute.For<IAddressBook>();

    addressBookMock.SamplePerson.Returns(personMock); //not working
    addressBookMock.SamplePerson = personMock; //not working
    addressBookMock.SamplePerson = (Person)personMock; //not working

    Assert.AreEqual(1, 1);
}
Run Code Online (Sandbox Code Playgroud)

我想将Persontype 的模拟变量分配给type 的模拟变量的属性AddressBook

这可能吗?

Nko*_*osi 3

IAddressBook.SamplePerson属性返回Person实现而不是IPerson接口,因此您的返回尝试IPerson将不起作用。

要么嘲笑Person班级

var personMock = Substitute.For<Person>();
var addressBookMock = Substitute.For<IAddressBook>();
addressBookMock.SamplePerson.Returns(personMock);
Run Code Online (Sandbox Code Playgroud)

或返回一个实际实例。

var person = new Person();
var addressBookMock = Substitute.For<IAddressBook>();
addressBookMock.SamplePerson.Returns(person);
Run Code Online (Sandbox Code Playgroud)