测试类:
public class ClassForTest {
public String hello(){
return "hello " + getClassName();
}
public String getClassName(){
return ClassForTest.class.getName();
}
}
Spock 类:
class ClassForSpockTest extends Specification{
def setupSpec(){
ClassForTest.metaClass.getClassName={"ClassForSpockTest"}
}
def "override test"(){
setup:
ClassForTest cft = new ClassForTest()
expect:
cft.getClassName() == "ClassForSpockTest"
}
def "mock test"(){
setup:
ClassForTest cft = new ClassForTest()
expect:
cft.hello() == "hello ClassForSpockTest"
}
}
覆盖测试测试通过! 模拟测试崩溃,cft.hello() 返回“hello ClassForTest”
最佳答案
您不能使用元类从该类中的另一个方法覆盖 Java 类中的方法调用。这是 spock、Java 和 groovy 的限制。在这种情况下,您必须使用其他模拟技术。例如,您可以使用子类化:
setup:
ClassForTest cft = new ClassForTest() {
String getClassName() {"ClassForSpockTest"}
}
关于java - 测试类中的 Spock 框架覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34857403/