c# - NSubstitute:模拟属性

标签 c# unit-testing mocking nsubstitute

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

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

我想将 Person 类型的模拟变量分配给 AddressBook 类型的模拟变量的 propeties

这可能吗?

最佳答案

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

模拟Person

var personMock = Substitute.For<Person>();
var addressBookMock = Substitute.For<IAddressBook>();
addressBookMock.SamplePerson.Returns(personMock);

或者返回一个实际的实例。

var person = new Person();
var addressBookMock = Substitute.For<IAddressBook>();
addressBookMock.SamplePerson.Returns(person);

关于c# - NSubstitute:模拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51401316/

相关文章:

c# - 将 Directx12 资源移植到 XAML 元素:关于 WRL::ComPtr 替换的建议?

spring - ils。使用内部的Spring bean测试命令对象

unit-testing - 如何为一小时后函数返回时间编写单元测试

ruby-on-rails - 使用 RSpec 验证部分参数

c# - 字符串到日期时间转换失败

C# 可插拔架构,论文考虑

go - 如何验证是否调用了特定函数

api - 如何使用 JEST 模拟通知 API?

c# - .NET Color 中的 RGB 格式

.net - xUnit 单元测试项目未读取 App.config