【发布时间】:2020-09-08 16:17:16
【问题描述】:
很遗憾,我还没有找到有关此主题的任何有用信息。
我有一些 Spock 测试需要使用 GroovyMock 而不是 Mock - 因为它支持模拟动态方法。
其中一个(非动态)方法采用字符串参数。有时 GString 会作为参数传递给该方法。这在生产代码以及Mock 中运行良好。
但是,在切换到 GroovyMock 后,我收到了 java.lang.IllegalArgumentException: argument type mismatch 异常,指向以下行(请参见下面的示例):
someClass.someMethod("foo ${1 + 1}")
我已经检查过在创建GroovyMock 期间可用的某些选项是否有帮助。到目前为止,我尝试了 verified 选项 - 不幸的是没有帮助。其他选项似乎没有机会在这里有用,所以我没有尝试使用它们(而且对于它们中的大多数我什至不知道如何使用它们)。
请查看以下小示例以供参考:
import spock.lang.Specification
class SomeClass {
String someMethod(String arg) {
return arg
}
}
class TestClass {
SomeClass someClass
String callMethod() {
someClass.someMethod("foo ${1 + 1}")
}
}
class FooSpec extends Specification {
def 'pass String to groovyMock mocked method taking a String argument'() {
given:
TestClass testClass = new TestClass()
SomeClass someClass = GroovyMock() // does not work
// SomeClass someClass = Mock() // test works if used instead of the previous line
testClass.someClass = someClass
when:
testClass.callMethod()
then:
1 * someClass.someMethod(_)
}
}
【问题讨论】: