2017-02-27 6 views
0

私が取り組んでいるモジュールは、アイテムのリストを保持し、特定の基準に基づいてそのリストからアイテムを見つけて返すメソッドを持っています。 「いくつかの一致する値が見つかった場合、いずれかが返される可能性があります」いずれかの条件のユニットテスト

Nunitでいくつかのテストを書こうとしていますが、この状態を表現できるものは見つかりません返されたオブジェクトはAまたはBのいずれかでなければならないが、返されるオブジェクトはどちらでもかまいませんが、どちらでもかまいません)

もちろん、結果が期待どおりかどうかをブール値に設定して、そのブール値を主張しますが、この全体的な質問は、これが単体テストのための「赤旗」であるかどうか、そしてより良い解決策があるかどうか疑問に思っています。

経験豊富なユニットテスターは、一般に許容可能な出力範囲があり、テストを1つの特定の実装に結びつけたくないケースをどのように処理しますか?

答えて

1

あなたの質問ではなく、一般的な形態であるので、私だけではなく、一般的な答えを与えることができますが、例えば...

Assert.That(someObject, Is.TypeOf<A>().Or.TypeOf<B>()); 
Assert.That(someObject, Is.EqualTo(objectA).Or.EqualTo(objectB)); 
Assert.That(listOfValidOjects, Contains.Item(someObject)); 

それはあなたがテストしているかの詳細に依存します。

0

私はJava、JUnit、およびパラメータテストから来ていますが、nunitもこれらをサポートしているようです(here参照)。

さまざまな変数の値を生成することができます(また、「ジェネレータ」も期待される全体的な結果を追跡できます)。

このアプローチを使用すると、すべての潜在的な入力値の組み合わせを「ハードコーディング」しないようにすることができます(実際にはを生成します)。少なくとも、異なる入力値の情報と期待された結果がソースコード内に「コロケート」された場所にコードを書くことができるはずです。

+0

私は質問が非常にはっきりと言われていないと思いますので、パラメータ化されたテストが私にどのように役立つか分かりません – Andy

関連する問題