如何编写 spock 测试来测试我的 class 被测和外部实用程序 class 之间的交互?
How do I write a spock test to test the interaction between my class under test and an external utility class?
我有以下groovyclass
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 class。当我逐步完成 spock 单元测试时,似乎 Utils.someFunction() 被调用了,所以我对可能发生的事情感到有点困惑。谁能建议?提前致谢!
您必须实施该方法,因为您是 运行 单元测试,而 grails 应用程序不是 运行。
使用注释 @ConfineMetaClassChanges
清理 class Utils
的 metaclass
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()
}
}
我有以下groovyclass
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 class。当我逐步完成 spock 单元测试时,似乎 Utils.someFunction() 被调用了,所以我对可能发生的事情感到有点困惑。谁能建议?提前致谢!
您必须实施该方法,因为您是 运行 单元测试,而 grails 应用程序不是 运行。
使用注释 @ConfineMetaClassChanges
清理 class 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()
}
}