目录
介绍
集成测试可确保应用程序的各个组件无缝协作。对于使用 xUnit 进行集成测试的开发人员,日志在测试期间会消失。如果没有这些日志,就很难理解测试的行为。本文介绍 ConnectingApps.Xunit.TestLogger NuGet包,该包旨在在xUnit集成测试期间恢复日志记录功能,从而深入了解测试的行为。
背景
在.NET世界中,该WebApplicationFactory类是用于设置Web应用程序集成测试的基本工具。此类是Microsoft.AspNetCore.Mvc.Testing包的一部分,允许开发人员建立和配置为测试量身定制的Web应用程序实例。有关为WebApplicationFactory使用集成测试的综合指南可以在Microsoft的官方文档中找到。
使用代码
若要使用ConnectingApps.Xunit.TestLogger NuGet包重新引入日志记录功能,需要对测试设置进行细微调整。它支持.NET 6、.NET 7和.NET 8。
以前,你已设置WebApplicationFactory如下所示:
public NoLoggingTest()
{
_factory = new WebApplicationFactory<Program>();
}
使用ConnectingApps.Xunit.TestLogger包,请使用以下方法:
public ImprovedLoggingTest(ITestOutputHelper output)
{
_factory = new TestLoggerWebApplicationFactory<Program>(output);
}
为了更好地理解这一点,让我们看一个详细的控制器方法:
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<weatherforecast> Get()
{
// first do some logging
_logger.LogInformation("This should be logged during testing");
// Then return an object like it is done in the Visual Studio Template
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
下面是该方法的相应测试:
using ConnectingApps.Xunit.TestLogger;
using System.Net;
using Xunit.Abstractions;
public class ImprovedLoggingTest : IDisposable
{
private readonly TestLoggerWebApplicationFactory<Program> _factory;
private readonly HttpClient _client;
public ImprovedLoggingTest(ITestOutputHelper output)
{
_factory = new TestLoggerWebApplicationFactory<Program>(output);
_client = _factory.CreateClient();
}
[Fact]
public async Task ReadInTestOutputIfSomethingIsLogged()
{
var response = await _client.GetAsync("/WeatherForecast");
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
public void Dispose()
{
_factory.Dispose();
_client.Dispose();
}
}
如需更全面的理解和其他示例,可以在GitHub上找到完整的源代码和相关文档。
下面是使用ConnectingApps.Xunit.TestLogger时日志记录显示方式的可视化表示:
兴趣点
ConnectingApps.Xunit.TestLogger软件包的引入为一个长期存在的问题提供了直接的解决方案。它与现有xUnit测试的无缝集成以及提供全面日志记录的能力增强了开发人员的调试体验。
https://www.codeproject.com/Tips/5370329/Enhancing-xUnit-Integration-Tests-with-Comprehensi