尝试使用Startup.cs文件进行单元测试时遇到一些问题。我不知道没有集成测试该怎么做。有什么办法吗?我将这部分代码保留在单元测试中。我正在使用xUnit
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
答案 0 :(得分:0)
您应该隔离要测试的功能。
例如,如果您使用诸如伪代码之类的特殊配置,则可以先将其拆分以对其进行测试:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.AddFoo();
}
public void AddFoo(this IApplicationBuilder app)
{
//stuff happens here
//and you can test this.
}
有时候很难,因为它们大多数是扩展方法。但是通常,如果正在调用特定功能,则可以Verify
。
如果您拥有.net Peek
之类的工具,则可以实际看到正在调用的非扩展方法,并验证该方法。
如果您要对整个startup.cs
进行“单元”测试,这将很困难,因为实际配置已在其中。
如果您真的想测试整个流程,则必须提供设置以能够应付测试运行。您可以创建一个自定义的webbuilder并使用实际的客户端调用它,但是它将花费一些额外的if / else语句,而且它不会很漂亮。我们使用startup.cs
并具有一些虚函数,因此我们可以重载棘手的部分,并为它提供一个自定义实现以用于测试。要创建这样的设置,可以使用以下示例:
private TestServer InitTestServer(HttpClient mockedHttpClient)
{
var builder = new WebHostBuilder()
.UseContentRoot(newBasePath)
.UseEnvironment("UnitTest")
.UseConfiguration(Configuration)
.UseStartup<Startup>()
.ConfigureTestServices((services) =>
{
services.AddSingleton<IHttpClientFactory>(new CustomHttpClientFactory(mockedHttpClient));
//some configuration override
});
return new TestServer(builder);
}