免责声明:此问题的单元测试相关信息并不真正相关 -如果您不熟悉此问题,可以跳至“问题” ,但它有助于设置上下文。
我有一门课需要进行单元测试。它看起来像这样:
public class NumberParser {
public static void CheckByteRange(string str){...}
[...]
public static void CheckFloatRange(string str){...}
[...]
}
我想使用 NUnit参数化单元测试来测试所有这些方法。下面是测试方法:
[TestCaseSource("CheckRange_Overflow_Inputs")]
public void CheckRange_Overflow(string value, Action<string> method)
{
Assert.Throws<Exception>(() => method(value));
}
测试用于TestCaseSourceAttribute
指定一个字段,该字段包含测试方法的参数集列表。
现在,NUnit 需要一个名为CheckRange_Overflow_Inputs
,类型为 的字段object[]
,它本身包含object[]
元素,每个元素都包含测试方法参数的值。
问题:
理想情况下,我想这样写字段:
private static readonly object[] CheckRange_Overflow_Inputs
= new object[]
{
new object[]{byte.MaxValue, NumberParser.CheckByteRange },
[...]
new object[]{float.MaxValue, NumberParser.CheckFloatRange },
[...]
};
但是编译器抱怨它不能将方法组转换为对象。
这是有道理的——NumberParser.CheckByteRange
可能是模棱两可的,例如它可能过载。
但是我怎样才能让编译器允许我保存(作为对象)调用的方法,该方法NumberParser.CheckByteRange
需要 astring
并返回void
?
我试过的(和失败的成功):
[...]
new object[]{byte.MaxValue, (Action<string>)NumberParser.CheckByteRange },
[...]