使用MSTest的[DynamicData]进行单元测试时遇参数不匹配异常
解决MSTest DynamicData参数数量不匹配异常
错误原因
你的GetTestData方法返回的数据源格式不符合MSTest的要求:
- MSTest要求
DynamicData的每个枚举元素是一个参数数组,数组长度必须和测试方法的参数数量完全一致。 - 你的测试方法
TestMethod3只接受1个data类型参数,但你一次性返回了包含2个data对象的数组,MSTest会尝试把这2个对象作为2个参数传递给测试方法,导致参数数量不匹配,触发TargetParameterCountException。
修正方案
调整GetTestData的返回逻辑,每个测试用例单独返回一个长度为1的数组(对应测试方法的单个参数):
[TestMethod] [DynamicData(nameof(GetTestData), DynamicDataSourceType.Method)] public void TestMethod3(data obj) { var _controller = new SampleController(); var result = _controller.GetAlertTypes(obj.number, obj.size); Assert.IsNotNull(result); } private static IEnumerable<object[]> GetTestData() { // 每个用例返回包含单个data对象的数组 data data1 = new data(); data1.number = 1; data1.size = 1; yield return new object[] { data1 }; data data2 = new data(); data2.number = 10; data2.size = 2; yield return new object[] { data2 }; }
额外注意事项
- 确保
data类是public访问级别,否则MSTest可能无法正常读取其属性值。 - 推荐将数据源的返回类型改为
IEnumerable<object[]>,这是MSTest官方推荐的标准格式,兼容性更好。
内容的提问来源于stack exchange,提问作者Gopal
相关产品推荐
相关产品推荐

