如何使用Spock

时间:2016-11-04 17:04:23

标签: grails testing spock

我在src/groovy这样的课程

public class MyClass {

@AutoWired
SomeOtherClass someOtherClass

String test() {
    return someOtherClass.testMethod()
}
}

当我为此方法编写测试时,我收到错误:Cannot invoke method testMethod() on null object

这是我的测试: -

def "test test" () {
    expect:
        myClass.test() == "somevalue"
}

我做错了什么?有没有办法模拟@Autowired类?

2 个答案:

答案 0 :(得分:1)

你需要嘲笑你的someOtherClass。像这样的东西

def "test test"(){
    setup:
    myClass.someOtherClass = Mock(SomeOtherClass)
    myClass.someOtherClass.testMethod() >> "somevalue"

    expect:
    myClass.test() == "somevalue"
}

答案 1 :(得分:1)

虽然之前的答案应该有效,但spock根据需要提供了更优雅的注入方式。您可以使用doWithSpring闭包来声明bean,就像使用resources.groovy在grails中提供的spring dsl支持一样。

class MyClass extends Specification{
def setup(){

   static doWithSpring={
       someOtherClass(SomeOtherClass)
       //declare below if want to inject myClass somewhere else as a bean else not
       /*myClass(MyClass){bean->
          someOtherClass = someOtherClass
      }*/
   }
}

def "test test" () {
    expect:
        myClass.test() == "somevalue"
}
}