私はSpockテストフレームワークを使用しています。Spockでは、「then」ブロックから重複したやりとりを排除する方法はありますか?
def assertMockMethodsInvocations() {
1 * mock.method1(...)
2 * mock.method2(...)
}
はその後に、このヘルパーメソッドを呼び出します。
def "test"() {
when:
doSomething()
then:
1 * mock.method1(...)
2 * mock.method2(...)
}
私はヘルパーメソッドに「それから」ブロックのコードを移動したい:私はこれに類似した構造で多くのテストを持っています次のように私の仕様のコードの重複を排除:
def "test"() {
when:
doSomething()
then:
assertMockMethodsInvocations()
}
はしかし、私はヘルパーメソッドでn * mock.method(...)
を配置するときにメソッド呼び出しを一致させることができません。次の例は示しています
// groovy code
class NoInvocationsDemo extends Specification {
def DummyService service
def "test"() {
service = Mock()
when:
service.say("hello")
service.say("world")
then:
assertService()
}
private assertService() {
1 * service.say("hello")
1 * service.say("world")
true
}
}
// java code
public interface DummyService {
void say(String msg);
}
// [RESULT]
// Too few invocations for:
//
// 1 * service.say("hello") (0 invocations)
//
// Unmatched invocations (ordered by similarity):
//
// 1 * service.say('hello')
// 1 * service.say('world')
//
// Too few invocations for:
//
// 1 * service.say("world") (0 invocations)
//
// Unmatched invocations (ordered by similarity):
//
// 1 * service.say('world')
// 1 * service.say('hello')
どのように私は私のthen:
ブロックから重複したコードを削除することができますか?
素晴らしいですが、質問がありますか? –
'n * mock.method(...)'はシンタックスシュガーであるため、この機能は使用できません。これを別の方法で使用すると、期待どおりに機能しません。メソッド呼び出しを取得しません。 @ScaryWombat – bitweaver