You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置xUnit生成含userMessage的测试报告及HTML报告?

问题解答

1. 让XML包含断言的userMessage

xUnit默认的XML日志仅会在测试失败时,将断言的userMessage写入<failure>节点中。若要捕获所有断言(包括通过的)的消息,需通过以下方式实现:

  • 修改测试代码,注入ITestOutputHelper输出断言消息:
    在测试类中注入ITestOutputHelper,每个断言通过后手动输出对应的userMessage,这样日志会捕获这些输出内容。示例代码:
    using Xunit;
    using Xunit.Abstractions;
    
    public class LoginTests
    {
        private readonly ITestOutputHelper _testOutput;
    
        // 构造函数注入输出助手
        public LoginTests(ITestOutputHelper testOutput)
        {
            _testOutput = testOutput;
        }
    
        [Fact]
        public async Task Login_is_Success()
        {            
            var client = new Client();
            var loginResponse = await carConfigClient.Login();         
            
            var errorAssertMsg = "Error should be NULL";
            Assert.True(string.IsNullOrEmpty(loginResponse.Error), errorAssertMsg);
            _testOutput.WriteLine($"Assert passed: {errorAssertMsg}");
    
            var tokenAssertMsg = "Acces Token should have more than 8 characters";
            Assert.True(loginResponse.AccessToken.Length > 8, tokenAssertMsg);
            _testOutput.WriteLine($"Assert passed: {tokenAssertMsg}");
        }
    
        [Fact]
        public async Task Login_is_Failure()
        {        
            var client = new Client();   
            var loginResponse = await carConfigClient.Login("Basic wrongCreds");
            
            var tokenNullMsg = "AccessToken should be NULL";
            Assert.True(string.IsNullOrEmpty(loginResponse.AccessToken), tokenNullMsg);
            _testOutput.WriteLine($"Assert passed: {tokenNullMsg}");
    
            var errorLengthMsg = "Error.length should be greater than 0 characters";
            Assert.True(loginResponse.Error.Length > 0, errorLengthMsg);
            _testOutput.WriteLine($"Assert passed: {errorLengthMsg}");
        }
    }
    
  • 重新生成XML日志:
    执行命令生成包含输出内容的XML:
    dotnet test --logger:xunit;logfilename=test-results.xml
    
    此时XML的<test>节点下会新增<output>标签,包含所有断言的输出消息。

2. 无需服务器生成HTML报告

可以使用第三方命令行工具直接将XML转换为静态HTML报告,无需本地服务器,直接打开本地文件即可查看:

方案1:使用ReportGenerator

  • 全局安装工具:
    dotnet tool install -g dotnet-reportgenerator-globaltool
    
  • 生成HTML报告:
    reportgenerator -reports:"TestResults/*.xml" -targetdir:"TestResults/HTMLReport" -reporttypes:Html
    
    打开TestResults/HTMLReport/index.html即可查看包含断言消息的详细报告。

方案2:使用xunit-viewer

  • 全局安装工具(需先安装Node.js):
    npm install -g xunit-viewer
    
  • 生成单文件HTML报告:
    xunit-viewer -r TestResults/*.xml -o TestResults/test-report.html
    
    直接打开生成的test-report.html文件即可查看。

3. 配置xUnit生成符合需求的报告

结合前两点,完整配置流程如下:

  1. 改造测试代码:注入ITestOutputHelper,在每个断言通过后输出对应的userMessage,确保所有断言消息被捕获。
  2. 生成带输出的XML结果:执行dotnet test --logger:xunit生成包含断言输出的XML文件。
  3. 转换为静态HTML报告:使用ReportGenerator或xunit-viewer将XML转换为静态HTML,实现类似Playwright的详细报告效果,可直接本地打开查看。

内容的提问来源于stack exchange,提问作者surfmuggle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:21:01