这是这里发布的问题的后续问题:
How to initialise/wire beans in Grails Spock unit tests?
我还没有找到在src/java中用java编写的spring bean,然后在Grails中使用Spock进行单元测试的示例。
给定:
// MyBean.java
// this needs to be in java as it is playing with spring-data-neo4j
package com.me;
public class MyBean {
@Autowired
def someNeo4jBeanThatCannotBeTestedByItself
String readFromDb() {
// this will execute code to actually read from a DB
return "Hello from DB";
}
}注意,"someNeo4jBeanThatCannotBeTestedByItself“是一个与spring -data-new4j相关联的bean,我希望看到我的代码实际上在这里写了东西,所以我希望我的单元/集成测试加载spring bean(我不想模拟这一点)。
测试用例是什么样子的,是集成测试吗?我已经尝试了几个变体,但是无法让spring bean被Grails测试应用初始化。
发布于 2015-01-19 14:38:43
我知道这是个老帖子。因为这个问题还没有回答,所以我正在尝试回答。如果你已经想好了,你可以忽略。
我相信你可以为此编写单元测试。但是如果这个类在下,src/groovy或者src/java spring autowire就不能工作了。您需要在`resources.groovy的文件中添加bean、someNeo4jBeanThatCannotBeTestedByItself和MyBean,如下所示:
beans={
someNeo4jBean (Neo4jBeanClass)
myBean(MyBean){
someNeo4jBeanThatCannotBeTestedByItself = ref(someNeo4jBean)
}
}您可以删除bean MyBean中的@Autowired标注
现在,为了使spec工作,您需要将此属性添加到您的spec static loadExternalBeans = true中,然后它加载resources.groovy文件中存在的bean。
示例规格:
@TestMixin(GrailsUnitTestMixin)
class MyBeanSpec extends Specification {
static loadExternalBeans =true//this loads beans present in resources.groovy
def myBean
def setup() {
myBean= applicationContext.getBean("myBean")
//now you can use this `myBean` in test cases..
}
}我也有过类似的情况,我用这种方法摆脱了这种情况。希望这能有所帮助。
https://stackoverflow.com/questions/26999925
复制相似问题