单元测试启动.cs



我在尝试使用 Startup.cs 文件进行单元测试时遇到一些问题。我不知道如何在没有集成测试的情况下做到这一点。有什么办法吗?我把我想在单元测试中的这部分代码留了下来。我正在使用 xUnit

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}

您应该隔离要测试的函数。

例如,如果您使用像以下伪代码这样的特殊配置,则可以通过首先拆分它来测试它:

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);
}

相关内容

最新更新