使用全面日志增强 xUnit 集成测试






3.12/5 (3投票s)
通过详细的日志记录,增强您的 xUnit 测试,以便获得更清晰的洞察力和更轻松的调试。
引言
集成测试确保应用程序的各个组件无缝协作。对于使用 xUnit 进行集成测试的开发人员来说,一个局限性在于测试期间日志会消失。没有这些日志,很难理解测试的行为。本文介绍了 ConnectingApps.Xunit.TestLogger NuGet 包,旨在在 xUnit 集成测试期间恢复日志记录功能,从而深入了解测试行为。
背景
在 .NET 世界中,WebApplicationFactory
类是为 Web 应用程序设置集成测试的基本工具。该类是 Microsoft.AspNetCore.Mvc.Testing 包的一部分,允许开发人员建立和配置专门用于测试的 Web 应用程序实例。关于如何使用 WebApplicationFactory
进行集成测试的全面指南可以在 Microsoft 的官方 文档 中找到。
Using the Code
为了使用 ConnectingApps.Xunit.TestLogger NuGet 包重新引入日志记录功能,需要在测试的设置中进行轻微调整。它支持 .NET 6、.NET 7、.NET 8 和 .NET 9(预览版)。
以前,您会像这样设置 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 测试的无缝集成以及提供全面日志记录的能力,增强了开发人员的调试体验。
历史
- 2023 年 10 月:在集成测试中使用 ConnectingApps.Xunit.TestLogger NuGet 包的介绍和利用。