一部のデータをリストに入力するメソッドがあり、内部でもう1つのメソッド(独立してテストしています)を呼び出し、一部のデータをリストに入力するとします。ここで、テストの最良の方法は何ですか?
外側のメソッドをテストするには? 内部メソッドからのデータもチェックする必要がありますか?それ以外の場合は、外部メソッドによって入力されたデータのみをテストしても問題ありませんか?
テスト対象の次のクラスがあるとします。
class MyTestClass {
int getAPlusB() { return getA() + getB() }
int getA() { return 1 }
int getB() { return 2 }
}
次のスポック テストを記述して、算術演算が正しいことを確認できますが、getA()
とgetB()
が実際に によって呼び出されることも確認できgetAPlusB()
ます。
def "test using all methods"() {
given: MyTestClass thing = Spy(MyTestClass)
when: def answer = thing.getAPlusB()
then: 1 * thing.getA()
1 * thing.getB()
answer == 3
}
これまでのところ、3 つのメソッドすべてですべてのコードが実行されています。getA と getB は呼び出されていることが確認されていますが、これらのメソッドのコードは実際に実行されています。あなたの場合、内部メソッドを個別にテストしていますが、おそらくこのテスト中にそれらをまったく呼び出したくないでしょう。spock spy を使用すると、テスト対象のクラスの実際のインスタンスをインスタンス化できますが、返される値を指定する特定のメソッドをスタブ化するオプションがあります。
def "test which stubs getA and getB"() {
given: MyTestClass thing = Spy(MyTestClass)
when: def answer = thing.getAPlusB()
then: 1 * thing.getA() >> 5
1 * thing.getB() >> 2
answer == 7
}