pla*_*ezy 7 c# configuration moq xunit asp.net-core-mvc
如何在单元测试中模拟这样的代码。我在 asp.net core 5 中使用 xUnit 和 Moq。我是 xUnit 和 Moq 的新手。
var url = configuration.GetSection("AppSettings").GetSection("SmsApi").Value;
Run Code Online (Sandbox Code Playgroud)
配置对象已经注入到构造函数中。
这是我目前在单元测试课程中的内容
public class UtilityTests
{
private readonly Utility sut;
public UtilityTests()
{
var mockConfig = new Mock<IConfiguration>();
var mockConfigSection = new Mock<IConfigurationSection>();
//mockConfigSection.Setup(x => x.Path).Returns("AppSettings");
mockConfigSection.Setup(x => x.Key).Returns("SmsApi");
mockConfigSection.Setup(x => x.Value).Returns("http://example.com");
mockConfig.Setup(x => x.GetSection("AppSettings")).Returns(mockConfigSection.Object);
sut = new Utility(mockConfig.Object);
}
[Fact]
public void SendSmsShdReturnTrue()
{
var fixture = new Fixture();
var result = sut.SendSms(fixture.Create<string>(), fixture.Create<string>());
result.Should().BeTrue();
}
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ala 12
事实是,IConfiguration
不应该被嘲笑。相反,它应该被建造。
var configForSmsApi = new Dictionary<string, string>
{
{"AppSettings:SmsApi", "http://example.com"},
};
Run Code Online (Sandbox Code Playgroud)
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(configForSmsApi)
.Build();
Run Code Online (Sandbox Code Playgroud)
{
"AppSettings": {
"SmsApi": "http://example.com"
}
}
Run Code Online (Sandbox Code Playgroud)
var configuration = new ConfigurationBuilder()
.AddJsonFile("smsapi.json", optional: false)
.Build();
Run Code Online (Sandbox Code Playgroud)
另一种方法是引入一个类来表示配置部分,然后使用IOptions
接口将其注入构造函数。
然后,您的测试配置变得简单,无需模拟,只需创建一个实例并将其传递给构造函数即可。
像下面这样:
class SmsApiSettings
{
public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
启动时注册
services.Configure<SmsApiSettings>(Configuration.GetSection("SmsApi"));
Run Code Online (Sandbox Code Playgroud)
构造函数
public class ClassUnderTest
{
private readonly SmsApiSettings _smsApiSettings;
public ClassUnderTest(IOptions<> smsOptions)
{
_smsApiSettings = smsOptions.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
测试
var settings = new SmsApiSettings { Url = "http://dummy.com" };
var options = Options.Create(settings);
var sut = new ClassUnderTest(options);
Run Code Online (Sandbox Code Playgroud)
享受没有嘲笑的幸福生活;)
归档时间: |
|
查看次数: |
9388 次 |
最近记录: |