Java 测试类中的spock框架重写方法
测试等级:Java 测试类中的spock框架重写方法,java,unit-testing,groovy,mocking,spock,Java,Unit Testing,Groovy,Mocking,Spock,测试等级: public class ClassForTest { public String hello(){ return "hello " + getClassName(); } public String getClassName(){ return ClassForTest.class.getName(); } } 斯波克等级: class ClassForSpockTest extends Spe
public class ClassForTest {
public String hello(){
return "hello " + getClassName();
}
public String getClassName(){
return ClassForTest.class.getName();
}
}
斯波克等级:
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"}
}
这段代码的工作方式与我使用Groovy 2.4.15时的工作方式相同。