我有以下groovy类
import Utils
class HelpController {
def search = {
Utils.someFunction()
}
}
这是我的spock groovy规范:
import Utils
import grails.test.mixin.*
import HelpController
@TestMixin(GrailsUnitTestMixin)
@TestFor(HelpController)
class HelpControllerSpec extends Specification {
void "should call someFunction method in Utils class"() {
when:
helpController.search()
then:
1 * Utils.someFunction()
}
}
运行测试会导致错误:
too few invocations for Utils.someFunction() (0 invocations)
Utils是一个java类。当我单步执行spock单元测试时,似乎调用了Utils.someFunction(),所以我对可能发生的事情感到有些困惑。任何人都可以建议吗?提前谢谢!
答案 0 :(得分:1)
您必须实现该方法,因为您正在运行单元测试,并且grails应用程序未运行。
使用注释@ConfineMetaClassChanges
清除Utils类的元类
import Utils
import grails.test.mixin.*
import HelpController
import spock.util.mop.ConfineMetaClassChanges
@TestMixin(GrailsUnitTestMixin)
@TestFor(HelpController)
@ConfineMetaClassChanges([Utils])
class HelpControllerSpec extends Specification {
setup(){
Utils.metaClass.someFunction = {
//expected response
}
}
void "should call someFunction method in Utils class"() {
when:
helpController.search()
then:
1 * Utils.someFunction()
}
}