3

一部のテストは、JUnitでこのアノテーション@RunWith(Theories.class)を使用して使用されていますが、いつ、なぜ使用するのかわかりません。

4

2 に答える 2

4

テストで入力と出力の間の一般化された関係に焦点を当てたい場合は、これらを使用する必要があります。https://blogs.oracle.com/jacobc/entry/junit_theoriesを参照してください。

于 2012-10-16T10:27:10.793 に答える
0

複数の種類の入力をキャプチャすることは1つのことだと思います。高レベルのアイデアは、メソッドがすべての可能な入力に対して真であるかどうかをテストすることです。

たとえば、5つの異なる入力を受け取る複雑なビジネスプロセスがあるとします。たとえば、入力ごとに10の可能な状態があるため、最終的に10 * 10 * 10 * 10 * 10=100,000の可能な入力状態になります。つまり、これらの100,000の出力値すべてが何であるかを事前に知る必要があります。

ただし、実際に100,000の状態すべてを列挙する必要はないことに気付くでしょう。おそらくあなたが興味を持っているサブセットがあります。例えば、理論化しましょう:

「管理者には権限の制限はありません」。そして、これが真実であると断言したい場合、私のテストは最終的に以下の擬似コードのようになります。

@Test
public void AdminsHaveNoPermissionRestriction(User user, BusinessProcess bp, Input a, Input b ...) {
   Assume.assumeThat("User is an admin", user.hasRole(admin);

   // .. rest of test which uses bp, a, b etc...
)

良い点は、関心のないオブジェクト(管理者以外)をスキップすることです。これは、仮定に失敗するためです。

于 2014-04-03T21:40:20.607 に答える