62

理論とパラメータ化されたテストの違いは何ですか?

テストクラスを作成するときの実装の違いには興味がありません。どちらかを選択する場合だけです。

4

5 に答える 5

30

私が理解していることから:パラメーター化されたテストを使用すると、一連の静的入力をテストケースに提供できます。

理論は似ていますが、概念が異なります。それらの背後にある考え方は、静的な値ではなく仮定でテストするテストケースを作成することです。したがって、提供されたテストデータがいくつかの仮定に従って真である場合、結果のアサーションは常に決定論的です。この背後にある推進力のアイデアの1つは、無限の数のテストデータを提供でき、テストケースは依然として真であるということです。また、多くの場合、負の数など、テスト入力データ内の可能性の世界をテストする必要があります。これを静的にテストする場合、つまり、いくつかの負の数を指定する場合、コンポーネントがすべての負の数に対して機能する可能性が高い場合でも、その機能が保証されるわけではありません。

私の知る限り、xUnitフレームワークは、提供されたテストデータの可能なすべての組み合わせを作成することにより、理論の概念を適用しようとします。

データ駆動型シナリオのシナリオにアプローチする場合は、両方を使用する必要があります(つまり、入力のみが変更されますが、テストは常に同じアサーションを繰り返し実行します)。

ただし、理論は実験的なもののように見えるため、入力データの一連の組み合わせをテストする必要がある場合にのみ使用します。他のすべての場合には、パラメーター化されたテストを使用します。

于 2011-05-03T23:28:45.993 に答える
12

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はパラメータの組み合わせを自動生成します

于 2011-04-29T15:10:32.660 に答える
3

上記の応答に加えて:4つの値と2つのテスト方法を持つ入力について

  • @RunWith(Theories.class)-2つのJUnitテストを生成します

  • @RunWith(Parameterized.class)-8つ(4つの入力x 2つのメソッド)のJUnitテストを生成します

于 2017-09-19T12:52:39.820 に答える
1

返信が少し遅れました。しかし、それは将来のテスターに​​役立つでしょう。

パラメータ化されたテストと理論

  • 「@RunWith(Parameterized.class)」で注釈が付けられたクラスVS「@ RunWith(Theories.class)」
  • テスト入力は、Collectionを返す静的メソッドから取得され、@Parametersで注釈が付けられます。vs静的フィールドは@DataPointsまたは@DataPointで注釈が付けられます。
  • 入力はコンストラクター(必須)に渡され、テストメソッドによって使用されますが、入力はテストメソッドに直接渡されます。
  • テストメソッドは@Testで注釈が付けられ、引数を取りませんvsテストメソッドは@Theoryで注釈が付けられ、引数を取ることができます
于 2017-05-08T17:56:27.553 に答える
0

私の理解では、違いは、入力の異なるセットをテストする(それぞれを個別にテストする)場合にパラメーター化されたテストが使用されることです。理論は、すべての入力を次のようにテストするパラメーター化されたテストの特殊なケースです。全体(すべてのパラメーターが真で​​ある必要があります)。

于 2011-04-20T22:18:45.257 に答える