我有一个服务类,该类具有采用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中设置的属性不起作用。如果有人可以帮助我,我将不胜感激。
答案 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; }
}
上面的示例在测试时通过了。