0
當該類在其他Java類中使用時,Groovy測試不會爲靜態類創建模擬。下面是測試證明了這一點GroovyMock在靜態方法調用時用於測試Java類時不起作用
Java類的代碼片段:
public class JavaClass {
public void method() {
ClassWithStaticMethod.doSomething();
}
}
用靜態方法的Java類:
public class ClassWithStaticMethod {
public static void doSomething() {
System.out.println("Static method called");
}
}
Groovy的測試失敗:
class JavaClassTest extends Specification {
def 'test'() {
given:
GroovyMock(ClassWithStaticMethod, global: true)
JavaClass javaClass = new JavaClass()
when:
javaClass.method()
then:
1 * ClassWithStaticMethod.doSomething() // <--- FAILS
}
}
這失敗並顯示消息:
Static method called <--- original method is called, it's not mocked
Too few invocations for:
1 * ClassWithStaticMethod.doSomething() (0 invocations)
Unmatched invocations (ordered by similarity):
None
因此,靜態方法沒有被嘲笑,實際的實現總是被調用。誰能解釋這種行爲?任何想法如何繞過這個?
Java版本:1.7.0_79,Groovy的版本:2.4.7,斯波克版本:1.0-常規-2.4,cgclib:3.1
與之前相同的輸出,不起作用 – lolotron
哦是的。你是對的... 我再次檢查。 如果使用「groovyc」編譯這些代碼(JavaClass.java和ClassWithStaticMethod.java),上述代碼將起作用。 – koji
也許它需要JMockit來模擬靜態方法。 – koji