如何使用 Spock 使用 @Autowired 测试 class
How to test class with @Autowired using Spock
我在 src/groovy
中有一个 class 像这样
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
class?
你需要嘲笑你的 someOtherClass
。像这样
def "test test"(){
setup:
myClass.someOtherClass = Mock(SomeOtherClass)
myClass.someOtherClass.testMethod() >> "somevalue"
expect:
myClass.test() == "somevalue"
}
虽然之前的答案应该有效,但 spock 提供了更优雅的方式来根据需要注入 bean。您可以使用 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"
}
}
我在 src/groovy
中有一个 class 像这样
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
class?
你需要嘲笑你的 someOtherClass
。像这样
def "test test"(){
setup:
myClass.someOtherClass = Mock(SomeOtherClass)
myClass.someOtherClass.testMethod() >> "somevalue"
expect:
myClass.test() == "somevalue"
}
虽然之前的答案应该有效,但 spock 提供了更优雅的方式来根据需要注入 bean。您可以使用 doWithSpring 闭包来声明 bean,就像使用 resources.groovy
.
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"
}
}