【问题标题】:How to inject spring beans into spock test如何将spring bean注入spock测试
【发布时间】:2012-04-06 08:51:07
【问题描述】:

我是 spock 的新手。我正在尝试针对使用 JDK 1.7、Spring 3.1、Groovy 1.8.6、Spock 0.6、Maven 3.0.4 的独立 Java 应用程序编写一个 spock 单元测试。一个基本的 hello world spock 测试正在运行。然而,当我尝试测试春豆时,我发现它们没有被注入。我使用提到的方法herewhen 块中的 businessObjectDao 为空。我如何让它发挥作用?

@ContextConfiguration(locations = "classpath*:test-appContext.xml")
class BusinessObjectPersistenceTest extends Specification {
    @Autowired
    BusinessObjectDao businessObjectDao

    def "business never set at least once"() {
        when:
            BusinessObjectDao.getBusinessObject()
        then:
            ...
    }
}

【问题讨论】:

  • getBusinessObject 方法实际上是 static 吗(BusinessObjectDao 参考上的大写 B)?如果是这样,那么我认为您不需要首先注入它的 instance 吗?
  • 可能是更新的 Spring/Spock 参考(用于注入):spockframework.org/spock/docs/2.0/module_spring.html

标签: java spring dependency-injection spock


【解决方案1】:

您很可能忘记包含 Spock Spring 依赖项。

获取方法如下:

行家

<dependency>
   <groupId>org.spockframework</groupId>
   <artifactId>spock-spring</artifactId>
   <version>0.6-groovy-1.8</version>
</dependency>

分级

'org.spockframework:spock-spring:0.6-groovy-1.8'

普通的时髦

@Grapes(
    @Grab(group='org.spockframework', module='spock-spring', version='0.6-groovy-1.8')
)

*0.6-groovy-1.8是当前版本,如果需要其他版本,替换即可

【讨论】:

  • 当前版本是0.6-groovy-1.8。
  • 是的,它是20 days old。记录并更正。
  • 我认为这是一个很好的答案,但让我为arrehman 添加一条评论。如果这是一个单元测试而不是你正在做的集成测试,你应该嘲笑那个 DAO。无论如何 +1 的答案。
  • @sfrj 我认为测试界对您的陈述存在一些分歧。它适用于模仿者与统计者。有人会说你应该只模拟适配器和端口。道很可能两者都不是。
  • 当前版本可以在here找到
【解决方案2】:

对于到达这里的其他人没有将他们的测试类注释为 Bean(此问题中的示例确实对此有足够的注释),这当然至少是必要的先验注射步骤(一般)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-26
    • 2022-01-19
    • 2014-05-15
    • 2013-06-25
    • 2015-03-04
    • 2020-05-11
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多