13

@Ruleこのようなことができるように作成したいと思います

@Test public void testValidationDefault(int i) throws Throwable {..}

ここで、i は によってテストに渡されるパラメーター@Ruleです。

しかし、私は得る

java.lang.Exception: Method testValidationDefault should have no parameters

それをバイパスして i パラメータを設定する方法はあります@Ruleか?

4

5 に答える 5

11

IAdapter が言ったように、Rules を使用して引数を渡すことはできませんが、同様のことができます。

すべてのパラメーター値を保持し、パラメーター値ごとに 1 回テストを評価し、メソッドを介して値を提供するルールを実装して、テストがルールから値を取得できるようにします。

次のようなルールを考えてみましょう (疑似コード):

public class ParameterRule implements MethodRule{
    private int parameterIndex = 0;
    private List<String> parameters;
    public ParameterRule(List<String> someParameters){ 
        parameters = someParameters;
    }

    public String getParameter(){
        return parameters.get(parameterIndex);
    }

    public Statement apply(Statement st, ...){
        return new Statement{
             public void evaluate(){
                 for (int i = 0; i < parameters.size(); i++){
                     int parameterIndex = i;
                     st.evaluate()
                 }      
             }
        }
    }
}

次のようなテストでこれを使用できるはずです。

 public classs SomeTest{
     @Rule ParameterRule rule = new ParameterRule(ArrayList<String>("a","b","c"));

     public void someTest(){
         String s = rule.getParameter()

         // do some test based on s
     }
 }
于 2012-06-05T10:17:30.047 に答える
8

テストに値を渡すために@Parametersandを使用します。@RunWith(value = Parameterized.class)例はここにあります。

@Ruleアノテーションについては知りませんでしたが、この投稿を読んだ後、テストにパラメーターを渡す以外の目的に役立つと思います。

テスト クラスで、MethodRule インターフェースを実装するオブジェクトを指すフィールドを作成し、@Rule 実装を追加して、これをルールとして処理するようにマークすると、JUnit はすべてのテストでインスタンスをコールバックします。これにより、テスト実行に関する追加の動作を追加できます。

これが役立つことを願っています。

于 2010-06-17T10:23:45.737 に答える
1

最近、zohhakプロジェクトを開始しました。パラメーターを使用してテストを記述できます (ただし、これはランナーであり、ルールではありません)。

@TestWith({
   "25 USD, 7",
   "38 GBP, 2",
   "null,   0"
})
public void testMethod(Money money, int anotherParameter) {
   ...
}
于 2012-12-05T15:55:19.480 に答える
0

パラメータをテストメソッドに直接渡すことができないというのはもはや真実ではないことに注意してください。Theoriesand @DataPoints/を使用して実行できるようになりました@DataPoint

例えば:

@RunWith(Theories.class)
public class TestDataPoints {

    @DataPoints
    public static int [] data() {
        return new int [] {2, 3, 5, 7};
    }

    public int add(int a, int b) {
        return a + b;
    }

    @Theory
    public void testTheory(int a, int b) {
        System.out.println(String.format("a=%d, b=%d", a, b));
        assertEquals(a+b, add(a, b));
    }
}

出力:

a = 2、b = 2
a = 2、b = 3
a = 2、b = 5
a = 2、b = 7
a = 3、b = 2
a = 3、b = 3
a = 3、b = 5
a = 3、b = 7
a = 5、b = 2
a = 5、b = 3
a = 5、b = 5
a = 5、b = 7
a = 7、b = 2
a = 7、b = 3
a = 7、b = 5
a = 7、b = 7

テストに合格しました。

于 2011-12-13T19:54:43.597 に答える
-4

@Ruleを使ってもテストメソッドにパラメータを渡すことはできません。

于 2011-01-11T06:53:18.390 に答える