C# 如何对startup.cs.Net Core进行单元测试
我的职位是该职位的延伸 我尝试使用以下代码对Startup.ca类进行单元测试(与上一篇文章的代码相同): 我认为问题在于,当我们模拟该类时,我无法确定需要哪种适当的设置才能使AddResponseCaching()方法通过。有人知道configurationSectionStub.Setup中缺少什么吗?或者我们需要模拟服务的行为 谢谢 用于确保C# 如何对startup.cs.Net Core进行单元测试,c#,asp.net-mvc,unit-testing,asp.net-core,mocking,C#,Asp.net Mvc,Unit Testing,Asp.net Core,Mocking,我的职位是该职位的延伸 我尝试使用以下代码对Startup.ca类进行单元测试(与上一篇文章的代码相同): 我认为问题在于,当我们模拟该类时,我无法确定需要哪种适当的设置才能使AddResponseCaching()方法通过。有人知道configurationSectionStub.Setup中缺少什么吗?或者我们需要模拟服务的行为 谢谢 用于确保启动基础设施正常工作。请注意,您可以通过在主机生成器上使用在测试中重写流服务来注入模拟服务 [Fact] public async Task Get_
启动
基础设施正常工作。请注意,您可以通过在主机生成器上使用在测试中重写流服务来注入模拟服务
[Fact]
public async Task Get_QuoteService_ProvidesQuoteInPage()
{
// Arrange
var client = _factory.WithWebHostBuilder(builder =>
{
builder.ConfigureTestServices(services =>
{
services.AddScoped<IQuoteService, TestQuoteService>();
});
})
.CreateClient();
//Act
var defaultPage = await client.GetAsync("/");
var content = await HtmlHelpers.GetDocumentAsync(defaultPage);
var quoteElement = content.QuerySelector("#quote");
// Assert
Assert.Equal("Something's interfering with time, Mr. Scarman, " +
"and time is my business.", quoteElement.Attributes["value"].Value);
}
[事实]
公共异步任务获取“U QuoteService”提供的QuoteInPage()
{
//安排
var client=\u factory.WithWebHostBuilder(builder=>
{
builder.ConfigureTestServices(服务=>
{
services.addScope();
});
})
.CreateClient();
//表演
var defaultPage=await client.GetAsync(“/”);
var content=wait HtmlHelpers.GetDocumentAsync(defaultPage);
var quoteElement=content.QuerySelector(“#quote”);
//断言
坚持平等(“有什么东西在干扰时间,斯卡曼先生,”+
“时间是我的事。”,quoteElement.Attributes[“value”].value);
}
用于确保启动
基础设施正常工作。请注意,您可以通过在主机生成器上使用在测试中重写流服务来注入模拟服务
[Fact]
public async Task Get_QuoteService_ProvidesQuoteInPage()
{
// Arrange
var client = _factory.WithWebHostBuilder(builder =>
{
builder.ConfigureTestServices(services =>
{
services.AddScoped<IQuoteService, TestQuoteService>();
});
})
.CreateClient();
//Act
var defaultPage = await client.GetAsync("/");
var content = await HtmlHelpers.GetDocumentAsync(defaultPage);
var quoteElement = content.QuerySelector("#quote");
// Assert
Assert.Equal("Something's interfering with time, Mr. Scarman, " +
"and time is my business.", quoteElement.Attributes["value"].Value);
}
[事实]
公共异步任务获取“U QuoteService”提供的QuoteInPage()
{
//安排
var client=\u factory.WithWebHostBuilder(builder=>
{
builder.ConfigureTestServices(服务=>
{
services.addScope();
});
})
.CreateClient();
//表演
var defaultPage=await client.GetAsync(“/”);
var content=wait HtmlHelpers.GetDocumentAsync(defaultPage);
var quoteElement=content.QuerySelector(“#quote”);
//断言
坚持平等(“有什么东西在干扰时间,斯卡曼先生,”+
“时间是我的事。”,quoteElement.Attributes[“value”].value);
}
我认为测试不是问题,因为错误包含定位程序集的清单定义与程序集引用不匹配。因此,您可能存在版本不匹配。与单元测试Program.Main
:完全不一样:P您可以通过TestServer
对整个应用程序进行集成测试,这会隐式测试您的启动配置是否也能正常工作,以确保测试用例为真,我也在想,如果单元测试该类是有意义的,但我决定尝试一下……我认为测试不是问题,因为错误包含定位程序集的清单定义与程序集引用不匹配。因此,您可能存在版本不匹配。与单元测试Program.Main
:完全不一样:P您可以通过TestServer
对整个应用程序进行集成测试,这会隐式测试您的启动配置是否也能正常工作,以确保测试用例为真,我也在想,单元测试那个类是否有意义,但我决定尝试一下……工厂从哪里来?在中阅读WebApplicationFactory
,在中阅读WebApplicationFactory
[Fact]
public async Task Get_QuoteService_ProvidesQuoteInPage()
{
// Arrange
var client = _factory.WithWebHostBuilder(builder =>
{
builder.ConfigureTestServices(services =>
{
services.AddScoped<IQuoteService, TestQuoteService>();
});
})
.CreateClient();
//Act
var defaultPage = await client.GetAsync("/");
var content = await HtmlHelpers.GetDocumentAsync(defaultPage);
var quoteElement = content.QuerySelector("#quote");
// Assert
Assert.Equal("Something's interfering with time, Mr. Scarman, " +
"and time is my business.", quoteElement.Attributes["value"].Value);
}