免責事項:この質問の単体テスト関連の情報は実際には関係ありません。これに慣れていない場合は「問題」にスキップできますが、コンテキストを設定するのに役立ちます.
単体テストが必要なクラスがあります。次のようになります。
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
string
void
?
私が試したこと(そして失敗した成功):
[...]
new object[]{byte.MaxValue, (Action<string>)NumberParser.CheckByteRange },
[...]