使用NSubstitute

时间:2019-07-02 12:11:47

标签: c# unit-testing mocking nsubstitute

我有一个服务类,该类具有采用IAppConfig的构造函数注入。 IAppConfig具有仅具有getter的几个属性。我想在测试项目中创建此服务类的实例。

我的服务班

IAppConfig _appConfig;
public class PeopleService(IAppConfig appConfig)
{
   _appConfig = appConfig;
}

AppConfig接口

public interface IAppConfig
{
   string BaseURL {get;}
   string AnotherProperty {get;}
}

如何使用NSubstitute模拟IAppConfig来创建PeopleService实例。

我尝试了以下代码,但是设置的属性为空字符串。

var _appConfig = Substitute.For<IAppConfig>();
_appConfig.BaseURL.Returns("http://localhost");
new PeopleService(_appConfig);

但是_appConfig中设置的属性不起作用。如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

显示此内容是因为此内容太多了,无法发表评论。

这个简化的示例表明该框架按预期工作,您需要更好地阐明实际问题。

[TestClass]
public class MyTestClass {
    [TestMethod]
    public void NSubstitute_Mocking_ReadOnly_Properties_Works() {
        //Arrange
        var expected = "http://localhost";
        var _appConfig = Substitute.For<IAppConfig>();
        _appConfig.BaseURL.Returns(expected);
        var subject = new PeopleService(_appConfig);

        //Act
        var actual = subject.URL;

        //Assert
        actual.Should().Be(expected);
    }
}

class PeopleService {
    IAppConfig _appConfig;
    public PeopleService(IAppConfig appConfig) {
        _appConfig = appConfig;
    }
    public string URL => _appConfig.BaseURL;
}

public interface IAppConfig {
    string BaseURL { get; }
    string AnotherProperty { get; }
}

上面的示例在测试时通过了。