理論とパラメーター化されたテストの違いは何ですか?
テストクラスを作成するときは、実装の違いには興味がありません。どちらか一方を選択するときだけです。
私の理解から:パラメータ化されたテストを使用すると、一連の静的入力をテストケースに提供できます。
理論は似ていますが、概念が異なります。それらの背後にある考え方は、静的な値ではなく仮定でテストするテストケースを作成することです。したがって、提供されたテストデータがいくつかの仮定に従って真である場合、結果のアサーションは常に確定的です。この背後にある原動力となるアイデアの1つは、無制限の数のテストデータを提供でき、テストケースが依然として真であることです。また、多くの場合、負の数値など、テスト入力データ内の可能性の範囲をテストする必要があります。静的にテストする場合、つまり、いくつかの負の数を指定する場合、たとえその可能性が非常に高いとしても、コンポーネントがすべての負の数に対して機能することは保証されません。
私が言えることから、xUnitフレームワークは、提供されたテストデータのすべての可能な組み合わせを作成することにより、理論の概念を適用しようとします。
データ駆動型シナリオのシナリオにアプローチする場合は、両方を使用する必要があります(つまり、入力のみが変更されますが、テストは常に同じアサーションを繰り返し実行しています)。
しかし、理論は実験的なものであるため、入力データの一連の組み合わせをテストする必要がある場合にのみ理論を使用します。他のすべてのケースでは、パラメーター化されたテストを使用します。
Parameterized.classは "parametrize"を単一の変数でテストし、Theories.class "parametrize"は複数の変数のすべての組み合わせをテストします。
例を読んでください:
http://blogs.Oracle.com/jacobc/entry/parameterized_unit_tests_with_junit
http://blog.schauderhaft.de/2010/02/07/junit-theories/
http://blogs.Oracle.com/jacobc/entry/junit_theories
Theories.classはHaskell QuickCheckに似ています:
http://en.wikibooks.org/wiki/Haskell/Testing
しかしQuickCheckはパラメータの組み合わせを自動生成します
上記の応答に加えて:4つの値と2つのテストメソッドを持つ入力
@RunWith(Theories.class)-2つのJUnitテストを生成します
@RunWith(Parameterized.class)-8(4入力x 2メソッド)JUnitテストを生成します
私の理解からの違いは、パラメーター化されたテストは異なる入力のセットをテストする場合に使用されることです(それぞれを個別にテストします)。理論は、すべての入力を次のようにテストするパラメーター化されたテストの特別なケースです。全体(すべてのパラメーターがtrueである必要があります)。
返信が少し遅れました。しかし、それは将来のテスターに役立つでしょう。
パラメータ化されたテストvs理論