在JUnit测试中更改Spring实现对象的最佳实践

时间:2012-08-21 11:41:48

标签: java spring junit

我有一个支持Spring的JUnit测试。它加载我的默认applicationContext。 现在我想为我的测试替换单个bean,即使用testEntityManager实现entityManager。

我可以想象三种可能的方式,看起来并不优雅:

  1. 拆分上下文(defaultContext,emContext)并按测试上下文文件覆盖上下文文件(测试资源中的emContext)
  2. 使用factory并选择testEntityManager(在生产代码中)
  3. 不使用Spring,而是自己构建对象层次结构(最不可行的解决方案)
  4. 是否有最佳做法如何正确

    这个问题的背景是:我真的只想替换边界附近的对象(DB,Webservices等)

    您诚挚的

    编辑:我现在已经解决了这个问题: 我在属性路径和测试类路径中添加了一个属性文件,并将Spring别名与属性占位符结合使用。 通过这种方式,我可以将我的bean连接到测试中的不同实现。

2 个答案:

答案 0 :(得分:9)

Spring允许您在从多个位置加载上下文时覆盖bean定义。

因此,您不一定需要拆分上下文“/applicationContext.xml”。 而是为测试“/applicationContext-test.xml”提供了一个额外的应用程序上下文,您可以在其中覆盖所需的bean。 然后引入两个配置并让测试配置中的bean覆盖生产配置中的bean。

@ContextConfiguration({"/applicationContext.xml", "/applicationContext-test.xml"})

答案 1 :(得分:0)

恕我直言的最佳做法是使用spring bean definition profiles。我的文档链接将引导您使用其他可读资源。 Google还会提供有用的链接,例如Gordon Dickens: Spring 3.1 Environment Profiles