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()