理論とパラメータ化されたテストの違いは何ですか?
テストクラスを作成するときの実装の違いには興味がありません。どちらかを選択する場合だけです。
理論とパラメータ化されたテストの違いは何ですか?
テストクラスを作成するときの実装の違いには興味がありません。どちらかを選択する場合だけです。
私が理解していることから:パラメーター化されたテストを使用すると、一連の静的入力をテストケースに提供できます。
理論は似ていますが、概念が異なります。それらの背後にある考え方は、静的な値ではなく仮定でテストするテストケースを作成することです。したがって、提供されたテストデータがいくつかの仮定に従って真である場合、結果のアサーションは常に決定論的です。この背後にある推進力のアイデアの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はHaskellQuickCheckに似ています:
http://en.wikibooks.org/wiki/Haskell/Testing
ただし、QuickCheckはパラメータの組み合わせを自動生成します
上記の応答に加えて:4つの値と2つのテスト方法を持つ入力について
@RunWith(Theories.class)-2つのJUnitテストを生成します
@RunWith(Parameterized.class)-8つ(4つの入力x 2つのメソッド)のJUnitテストを生成します
返信が少し遅れました。しかし、それは将来のテスターに役立つでしょう。
パラメータ化されたテストと理論
私の理解では、違いは、入力の異なるセットをテストする(それぞれを個別にテストする)場合にパラメーター化されたテストが使用されることです。理論は、すべての入力を次のようにテストするパラメーター化されたテストの特殊なケースです。全体(すべてのパラメーターが真である必要があります)。