MSTest 2.0 DataTestMethod使用DynamicData时参数顺序调换问题
问题原因
这是MSTest V2低于2.2.4版本的已知Bug,并非你遗漏配置。该问题出现在框架内部处理无类型object[]格式的DynamicData数据源时,值类型参数的映射逻辑异常,会出现参数顺序倒排的问题。
解决方案
- 优先升级NuGet依赖包:将
MSTest.TestFramework和MSTest.TestAdapter两个包升级到2.2.4及以上稳定版本,官方已在后续版本修复该问题。 - 若暂时无法升级版本,可改用强类型包装参数规避映射错误,示例修改如下:
[TestClass] public class SampleTest { public TestContext TestContext { get; set; } // 改用匿名类包装参数,避免顺序映射错误 private static IEnumerable<object[]> ReusableTestData => new List<object[]> { new object[] { new { Param1 = 1, Param2 = 2, Param3 = 3 } }, new object[] { new { Param1 = 4, Param2 = 5, Param3 = 6 } } }; [DataTestMethod] [DynamicData(nameof(ReusableTestData))] public void Test1(dynamic testData) { TestContext.WriteLine($"{testData.Param1} {testData.Param2} {testData.Param3}"); } }
- 也可改用
ITuple强类型传参,和上述方案逻辑一致,本质是绕过框架对同类型值参数的自动排序逻辑。
内容的提问来源于stack exchange,提问作者Martin Ortuno
相关产品推荐
相关产品推荐

