VS2019中NUnit结合TestCaseSource出现额外无来源测试项问题
解决NUnit测试中出现无来源测试项导致跳过的问题
根据你描述的场景——VS2019 + .NET Core 3.1 + NUnit,使用TestCaseSource返回三元组数组时出现无来源测试项、测试被标记为不确定的情况,我整理了几个针对性的排查和解决步骤:
1. 优先检查NuGet包版本兼容性
你当前使用的NUnit和测试适配器版本组合(NUnit v3.12.0 + NUnit3TestAdapter v3.17.0)在.NET Core 3.1环境下,对值类型元组数组的测试用例识别可能存在兼容性问题。建议升级到更适配的版本:
- 将NUnit升级到
3.13.3及以上版本(该版本强化了对.NET Core平台值类型元组的支持) - 将NUnit3TestAdapter升级到
4.0.0及以上版本(优化了VS2019和.NET Core 3.1的测试发现逻辑) - 同步升级Microsoft.NET.Test.Sdk到
16.11.0左右,保持与VS2019(最高版本为16.11.x)的版本匹配
升级完成后,清理并重新生成解决方案,再运行测试看看问题是否消失。
2. 调整测试用例源的返回类型(规避值类型数组识别问题)
NUnit对值类型数组(比如(int,int,int)[])的序列化和测试用例识别偶尔会出现异常,你可以把三元组包装成自定义类/结构体来规避这个问题:
步骤1:定义测试用例实体类
public class CalcTestData { public int ValueA { get; set; } public int ValueB { get; set; } public int ValueC { get; set; } public CalcTestData(int a, int b, int c) { ValueA = a; ValueB = b; ValueC = c; } // 可选:重写ToString(),让测试资源管理器显示更清晰的用例名称 public override string ToString() { return $"({ValueA}, {ValueB}, {ValueC})"; } }
步骤2:修改TestCaseSource的返回类型
public static IEnumerable<CalcTestData[]> TestInput { get { yield return new[] { new CalcTestData(0, 2, 3), new CalcTestData(0, 1, 7) // 其他测试用例 }; } }
步骤3:更新测试方法签名
[Test] [TestCaseSource(nameof(TestInput))] public void CalcTotalTime_Given_known_valid_input_Then_returns_expected_result(CalcTestData[] input) { // 你的测试逻辑,比如遍历input中的每个CalcTestData对象获取值 }
3. 清理VS测试缓存
有时候VS测试资源管理器的缓存会导致异常显示,尝试以下操作:
- 关闭VS,手动删除项目目录下的
bin和obj文件夹 - 重新打开VS,右键解决方案选择清理解决方案,然后再选择生成解决方案
- 在测试资源管理器中点击重新运行所有测试按钮
内容的提问来源于stack exchange,提问作者dhochee
相关产品推荐
相关产品推荐

