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

las*_*aut 7 java junit spring

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

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

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

是否有一个最佳实践如何去做正确的

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

此致

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

小智 9

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

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

@ContextConfiguration({"/applicationContext.xml", "/applicationContext-test.xml"})
Run Code Online (Sandbox Code Playgroud)