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

如何通过TestCaseSource向NUnit测试传入C# Record?遇单例执行异常

NUnit 3.13.3中C# Record测试参数的兼容问题解决

你的问题源于NUnit 3.13.3对C# 9 Record类型的支持存在bug——该版本发布时Record特性刚推出,NUnit在处理Record类型的测试用例时,无法正确识别非null的Record实例作为独立测试用例,导致仅执行了null参数的用例,测试资源管理器显示的名称也存在异常。

解决方法

1. 升级NUnit版本

将NUnit更新至3.13.4及以上的稳定版本(推荐最新正式版),后续版本已修复了Record类型的兼容性问题,无需修改代码即可让两个测试用例正常执行。

2. 手动指定测试用例名称(无法升级时)

改用TestCaseData封装测试用例并显式设置唯一名称,绕过NUnit对Record默认ToString的错误处理:

修改测试用例源:

private static readonly IEnumerable<TestCaseData> _cases = new List<TestCaseData>
{
    new TestCaseData(null).SetName("NullRecordParameter"),
    new TestCaseData(new RecordParameter(Guid.NewGuid())).SetName("ValidRecordParameter")
};

测试方法和Record定义保持不变:

[TestCaseSource(nameof(_cases))]
public void MethodInTestProject(RecordParameter recordParameter)
{
    Assert.Pass();
}

public record RecordParameter(Guid StoreId);

显式命名后,NUnit能正确区分两个测试用例,均可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:22:43