我有一个支持Spring的JUnit测试。它加载我的默认applicationContext。 现在我想为我的测试替换单个bean,即使用testEntityManager实现entityManager。
我可以想象三种可能的方式,看起来并不优雅:
是否有最佳做法如何正确?
这个问题的背景是:我真的只想替换边界附近的对象(DB,Webservices等)
您诚挚的
编辑:我现在已经解决了这个问题: 我在属性路径和测试类路径中添加了一个属性文件,并将Spring别名与属性占位符结合使用。 通过这种方式,我可以将我的bean连接到测试中的不同实现。
答案 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。