7

我有一个启用 Spring 的 JUnit 测试。它加载我的默认应用程序上下文。现在我想为我的测试替换一个bean,即用testEntityManager 替换entityManager。

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

  1. 拆分上下文(defaultContext,emContext)并通过测试上下文文件覆盖上下文文件(测试资源中的emContext)
  2. 使用工厂并选择 testEntityManager (在生产代码中)
  3. 不使用 Spring,而是自己构建对象层次结构(最不可行的解决方案)

是否有最佳实践如何正确地做到这一点

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

此致

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

4

2 回答 2

9

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

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

@ContextConfiguration({"/applicationContext.xml", "/applicationContext-test.xml"})
于 2012-08-21T12:34:05.750 回答
0

恕我直言,最佳实践是使用 spring bean 定义配置文件。我的文档链接将引导您访问其他可读资源。Google 还将提供有用的链接,例如Gordon Dickens: Spring 3.1 Environment Profiles

于 2012-08-21T14:00:01.907 回答