我正在使用Spock测试框架。我有很多测试结构与此类似:
def "test"() {
when:
doSomething()
then:
1 * mock.method1(...)
2 * mock.method2(...)
}
我想将“then”块的代码移动到辅助方法:
def assertMockMethodsInvocations() {
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:
块中删除重复的代码?
答案 0 :(得分:3)
实际上我找到了解决这个问题的简单方法。我们需要做的是在interaction
块中包装辅助方法。
then:
interaction {
assertService()
}