如何使用斯波克
与@Autowired测试类我有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
课程?
您需要模拟您的someOtherClass
。像这样的东西
def "test test"(){
setup:
myClass.someOtherClass = Mock(SomeOtherClass)
myClass.someOtherClass.testMethod() >> "somevalue"
expect:
myClass.test() == "somevalue"
}
这只适用于该行存在的情况'myClass.someOtherClass.testMethod()>>“somevalue”'而不是这样做,我实际上需要实际方法的返回值而不是模拟方法的值。 – Anthony
然后它不是一个单元测试。你应该在自己的Spec,SomeOtherClassSpec中测试'someOtherClass.testMethod()'。调用其他类应调用Stubbed/Mocked。 –
尽管以前的答案应该可以工作,但spock根据需要提供了更加优雅的注入方式。你可以使用doWithSpring closure来声明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"
}
}
你有没有尝试做Spring关闭? –