在辅助方法中,1 * mock.method()的'*'被识别为乘法符号

时间:2015-04-29 02:29:18

标签: spock

我试图从

移动一些验证
then:
   1*mock.method()
   result.value>0

这样的辅助方法,

 def reusedVerification(Mock mock,Model result){
     assert 1*mock.method()
     assert result.Value>0
 }

但是spock给我一个像这样的错误

groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method
java.lang.Integer#multiply.Cannot resolve which method to invoke for [null]
due to overlapping prototypes between:
     [class java.lang.Character]
     [class java.lang.Number]
at .....

我认为'*'符号在辅助方法中被识别为乘法符号,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

Spock的模拟验证语法只能直接在测试体中使用。

答案 1 :(得分:0)

您可以在explicit interaction block内部调用助手验证方法。

  then:
   interaction { reusedVerification(theMock, theResult) }

helper方法中的任何断言都应该是spock交互。例如:

 def reusedVerification(Mock mock,Model result){
     1 * mock.method()
     result.Value > 0
 }

如果使用的是IntelliJ,则可能会为1 * mock.method()语句给出“方法调用不明确”的警告。您可以使用以下方法抑制这种情况:

   //noinspection GroovyAssignabilityCheck
   1 * mock.method()