0

MyService.class

public boolean myMethod1() {
    boolean success = false
    for (1..2) {
        success = myMethod2()
    }
    return success
}

public boolean myMethod2() {
    int value = otherService.someMethod() // mocked this method call
    boolean saved = false
    try {
        // trying to persist value
    } catch (ValidationException e) {
        if (someCondition)
            myMethod2() // comes back here instead of going to the method called :  "Problem line"
    }
    return saved
}

otherService.someMethod()実行ごとに異なる結果を返すようにモックしたテストケースがあります。Grails バグではなくグルーヴィーな方法を使用する - http://jira.grails.org/browse/GRAILS-4611

検証例外があり、特定の条件でmyMethod2()、データを保存するための新しい出力を取得するために再帰的に呼び出したい。モックされたメソッド クロージャーは、最初のパスが int を返すような方法で出力を返します。これは、内部的に (true/false) を に返しますmyMethod1()。次に (ループから)otherService.someMethod()が呼び出されると、a を引き起こす出力が返さvalidationExceptionれ、新しい出力に対して同じメソッドが呼び出されます。モック化されたメソッドが 3 回目に呼び出されると、モック化された出力は異なる値を返しますが、validationException は発生しません。try ブロックを実行すると、 の return 文になりますが、それを呼び出した にmyMethod2()戻るのではなく、「問題行」に戻ります。myMethod1()

コールバックするテストケースの作り方myMethod1()

4

2 に答える 2

1

このように考えてみてください。私は電車で移動していて、座席から立ち上がり、あるコンパートメントから別のコンパートメントへ、相互接続を介して別のコンパートメントから別のコンパートメントへと歩きました。今、私は電車の4番目のコンパートメントにいます。1 番目のコンパートメントにある自分の席に戻りたい場合は、4 番目のコンパートメントから 1 番目のコンパートメントに直接ジャンプできないため、4 番目のコンパートメントから 3 番目、2 番目から 1 番目までずっと歩かなければなりません (私がハルクまたはアイアンでない限り)男と電車の上)。同様の概念がメソッド呼び出しにも当てはまります。

method1()を呼び出しmethod2()ます。method2()method2()

一方return、最後のメソッドからの値は、コントロールが逆の順序でトレース バックする必要があります。したがってmethod1()、元に戻るには、呼び出し元に戻るために成功条件をチェックする必要があります。次のようなものです。

public boolean myMethod2() {

    int value = otherService.someMethod() // mocked this method call
    boolean saved = false
    try {
        // trying to persist value
    } catch (ValidationException e) {
        if (someCondition){
            myMethod2() // comes back here instead of going to the method called :  "Problem line"
            if(some value satisfied){
                 return // return to caller with true or false or whatever according to your need
             }
        }
    }
    return saved
}
于 2013-04-26T18:56:31.713 に答える