asp.net Core WebHostBuilder在集成测试时的奇怪行为
本文关键字:集成测试 net Core WebHostBuilder asp | 更新日期: 2023-09-27 18:14:04
我在一个用asp.net Core制作的Web应用程序上工作,我尝试使用TestServer进行集成测试。
我遵循这篇博客文章来设置我的测试环境。
应用程序的Startup.cs如下所示:
public class Startup
{
public Startup(IHostingEnvironment env)
{
applicationPath = env.WebRootPath;
contentRootPath = env.ContentRootPath;
// Setup configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(contentRootPath)
.AddJsonFile("appsettings.json")
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
// Many services are called here
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime)
{
// Many config are made here
loggerFactory.AddSerilog();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=auth}/{action=login}/{id?}");
});
}
}
对于集成测试,我使用以下代码创建WebHostBuilder
var builder = new WebHostBuilder()
.UseContentRoot(appRootPath)
.UseStartup<TStartup>()
.UseEnvironment("test")
.ConfigureServices(x =>
{
.AddWebEncoders();
});
如果我运行一个简单的测试,将检查主页是否可访问,它工作。
由于某些原因,我必须在启动中更改一些配置。所以我在WebHostBuilder的配置中添加了一个调用:
var builder = new WebHostBuilder()
.UseContentRoot(appRootPath)
.UseStartup<TStartup>()
.UseEnvironment("test")
.ConfigureServices(x =>
{
.AddWebEncoders();
})
.Configure(x => {
// Some specific configuration
});
而且,我不知道为什么(这就是为什么我需要你的帮助),当我像以前一样调试同样简单的测试时,启动类的ConfigureServices和Configure方法永远不会被调用…即使我只是让Configure方法为空。
这种行为正常吗?
如何设置特定的配置而不直接在Startup.cs中添加?
WebHostBuilder.Configure
代替UseStartup
,它们不能同时使用。相反,您可以在ConfigureServices
中注册IStartupFilter
。看这里。