2016-11-16 65 views
0

我有以下的常规类如何编写spock测试来测试我的课程与外部实用程序课程之间的交互?

import Utils 

class HelpController { 

    def search = { 
     Utils.someFunction() 
    } 

} 

这里是我的斯波克常规规格:

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()被调用,所以我对于可能发生的事情有些困惑。任何人都可以建议吗?提前致谢!

回答

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() 
    } 

} 
+0

尼斯元类,但不应该在Utils.metaClass改变去了@ConfineMetaClassChanges涵盖范围内? – railsdog

+0

你是对的!谢谢 – quindimildev

+0

感谢您的建议!但是,我看到“没有这样的属性:用于Utils的元类”错误。我尝试在Utils中扩展Expando,但仍然收到相同的错误...请注意Utils是POJO –

相关问题