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

如何获取NUnit测试执行失败时对应的C#测试对象/数据参数值?

解决方案

下面是可直接落地的4种实现方式,可根据你的需求组合使用:

  • 自定义测试用例显示名称(最直观)
    在TestCaseSource返回TestCaseData时,调用SetName方法将你需要排查的关键字段拼接到用例名称中,测试报告中会直接显示每条用例对应的核心参数,无需额外查看日志:
    private static IEnumerable<TestCaseData> GetDataToSubmit()
    {
        var simpleAssignment = new DummyAssigmentGenerator()
                                        // 你的生成逻辑
                                        .Generate();
        // 把需要排查的关键字段(比如任务类型、金额、关联ID等)拼接到用例名
        yield return new TestCaseData(simpleAssignment)
            .SetName($"Test_SubmitAssignment_类型:{simpleAssignment.Type}_金额:{simpleAssignment.Amount}_ID:{simpleAssignment.Id}");        
    }
    
  • 输出全量测试数据到测试报告
    借助NUnit内置的TestContext将测试对象全量序列化输出,所有输出内容会自动附加到对应测试用例的报告详情中,你可以在测试方法开头添加这段逻辑,也可以封装到测试基类的SetUp方法中全局生效:
    [Test]
    [TestCaseSource("GetDataToSubmit")]
    public async Task Test_SubmitAssignmentDynamicFlow(Assignment assignment)
    {
        // 输出全量测试数据,缩进格式化方便阅读
        TestContext.WriteLine($"测试用例完整数据:\n{JsonSerializer.Serialize(assignment, new JsonSerializerOptions { WriteIndented = true })}");
        
        // 你原来的测试逻辑
        using var playwright = await Playwright.CreateAsync();
        // ...
    }
    
  • 失败时附加关联排查信息
    可以配合Playwright的故障排查能力,在测试失败时同时输出测试数据、页面截图、当前页面源码,进一步降低定位成本:
    [Test]
    [TestCaseSource("GetDataToSubmit")]
    public async Task Test_SubmitAssignmentDynamicFlow(Assignment assignment)
    {
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
        var page = await browser.NewPageAsync();
        try
        {
            // 你的测试逻辑
        }
        catch (Exception)
        {
            // 失败时输出数据+截图
            TestContext.WriteLine($"失败用例数据:\n{JsonSerializer.Serialize(assignment, new JsonSerializerOptions { WriteIndented = true })}");
            var screenshotPath = Path.Combine(AppContext.BaseDirectory, $"{TestContext.CurrentContext.Test.Name}_失败截图.png");
            await page.ScreenshotAsync(new PageScreenshotOptions { Path = screenshotPath, FullPage = true });
            TestContext.AddTestAttachment(screenshotPath, "失败页面全量截图");
            throw;
        }
    }
    
  • 结构化存储测试参数(适配自定义报告)
    如果你使用自定义的测试报告模板,还可以将测试对象的字段存入TestCaseData的Properties集合,报告可以直接读取这些属性做结构化展示,比纯日志更易读:
    yield return new TestCaseData(simpleAssignment)
        .SetName($"Test_SubmitAssignment_{simpleAssignment.Id}")
        .SetProperty("TaskType", simpleAssignment.Type)
        .SetProperty("Amount", simpleAssignment.Amount)
        .SetProperty("Creator", simpleAssignment.Creator);
    

注意:如果你的Assignment对象包含敏感字段(比如密码、密钥),序列化输出时请先做脱敏处理,避免敏感信息泄露到测试报告中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:36:04