[TestCaseSource]
またはのようなものを使用してパラメーター化された NUnit テストを作成すると[ValueSource]
、NUnit はパラメーターをテスト メソッドに直接渡します。しかし、これらのパラメーターにアクセスする他の方法はありますか?たとえば、ヘルパーメソッドからSetUp
、またはヘルパーメソッドから (パラメーター値をそのヘルパーメソッドに明示的に渡す必要はありません)?
たとえば、3 つの異なるシナリオ (「上昇率」、「下降率」、「一定率」など) があるとします。特定の計算のテストを書いていますが、いくつかのテストは 3 つのシナリオすべてで同じ動作をします。その他は 3 つのうちの 2 つです (もう 1 つのシナリオについては、2 つ目のテストを作成します)。他の人は、シナリオごとに個別のテストを行います。パラメータ化されたテストは、これをモデル化するための良い方法のようです。シナリオごとに戦略オブジェクトを記述し、各テストが適用されるシナリオに基づいてテストをパラメーター化できます。
私はこのようなことができます:
public IEnumerable<RateStrategy> AllScenarios {
get {
yield return new RisingRatesStrategy();
yield return new FallingRatesStrategy();
yield return new ConstantRatesStrategy();
}
}
[TestCaseSource("AllScenarios")]
public void SomethingThatIsTheSameInAllScenarios(RateStrategy scenario) {
InitializeScenario(scenario);
... arrange ...
... act ...
... assert ...
}
これの欠点はInitializeScenario
、すべてのテストで呼び出すことを覚えておく必要があることです。これは混乱しやすく、テストを読みにくくします。このテストがどのシナリオに適用されるかを正確に示す属性に加えて、テストを乱雑にする追加のコード行も必要です。 、シナリオがあります。
テストパラメータにアクセスできる他の方法はありますか? TestContext
たとえば、SetUp
メソッドからテストのパラメーターにアクセスできるようにする静的プロパティはありますか?
(TestContext
有望に見えましたが、テストの名前と、それが成功したか失敗したかだけを教えてくれます。テストのパラメーターは、実際のオブジェクトとしてではなく、表示文字列の一部としてのみ表示されます。戦略オブジェクトを取得できず、その上でメソッドの呼び出しを開始します。)