私は最初の単体テストクラスを完成させましたが、私のロジックの多くをコピーして貼り付けてしまったという不満を感じました。いくつかの検索後、私は[TestCaseSource]
か[TestCase]
は私が潜在的に必要なものであることがわかったが、私は[TestCaseSource]
を使用WHE私は、下のメッセージTestCaseSourceまたはTestCaseでオブジェクトを使用しているNunit
結果メッセージを取得:TestCaseSourceAttributeに指定またはsourceNameが静的フィールド、プロパティやメソッドを参照する必要があります。
以下の属性のパラメータの型の発現または配列の作成表現のtypeof属性引数は定数式でなければなりません
または[TestCase]
のエラー1は、
[TestCaseSource]
を使用するための私のコードです(読みやすいようにtestCaseInputの他の項目を削除しました)以下は210private SomeFormValidator SomeFormValidator; private static MyClass _myClass { get; set; } private readonly object[] testCaseInput = { new object[] { typeof(MyClass), "MyClass is required", _myClass }, }; [SetUp] public void Setup() { SomeFormValidator = new SomeFormValidator(); _myClass = new MyClass(); } [Test, TestCaseSource("testCaseInput")] public void Should_have_error_message_when_property_is_null(string message, object property) { var result = SomeFormValidator.ShouldHaveValidationErrorFor(x=> x.MyClass , property); result.WithErrorMessage(message); }
TestCaseSource
については[TestCase]
(私は読みやすく、それを維持するために他の項目を削除した)private SomeFormValidator SomeFormValidator; const MyClass _myClass = new MyClass(); [SetUp] public void Setup() { SomeFormValidator = new SomeFormValidator(); } [Test] [TestCase("MyClassis required", _myClass)] public void Should_have_error_message_when_property_is_null(string message, object property) { var result = SomeFormValidator.ShouldHaveValidationErrorFor(aup => aup.MyClass, property); result.WithErrorMessage(message); }
'testCaseInput'のみ'民間readonly'で、それはまた 'static' –
にする必要が転覆は何もコピーではありませんがテストが小さくてシンプルな場合は、テストからテストにいくつかの部分(通常はアレンジセクション)を貼り付けます。そうでない場合、_setup_または_source_メソッドはほとんど問題を解決しません。それについての素晴らしい記事[http://jamesnewkirk.typepad.com/posts/2007/09/why-you-should-.html]があります。 –