Java 在JUnit测试中更改Spring实现对象的最佳实践
我有一个支持Spring的JUnit测试。它加载默认的applicationContext。 现在我想为我的测试替换一个bean,即用testEntityManager替换entityManager 我可以想象三种可能的方式,它们看起来并不优雅:Java 在JUnit测试中更改Spring实现对象的最佳实践,java,spring,junit,Java,Spring,Junit,我有一个支持Spring的JUnit测试。它加载默认的applicationContext。 现在我想为我的测试替换一个bean,即用testEntityManager替换entityManager 我可以想象三种可能的方式,它们看起来并不优雅: 拆分上下文(defaultContext,emContext)并按测试上下文文件(测试资源中的emContext)覆盖上下文文件 使用factory并选择testEntityManager(在生产代码中) 不使用Spring,而是自己构建对象层次结构(
通过这种方式,我可以在测试中将bean连接到不同的实现。当您从多个位置加载上下文时,Spring允许您覆盖bean定义 因此,您不必拆分上下文“/applicationContext.xml”。 而是为test“/applicationContext test.xml”提供一个附加的应用程序上下文,在这里覆盖所需的bean。 然后拉入这两个配置,让测试配置中的bean覆盖生产配置中的bean
@ContextConfiguration({"/applicationContext.xml", "/applicationContext-test.xml"})
最好的做法是使用弹簧。我的文档链接将引导您找到其他可读资源。谷歌还将提供有用的链接,如。如果你找到了一个解决方案,你应该将其作为答案插入,并将此答案标记为已接受(这样就可以看到问题已解决)。如果答案提供了一个很好的解决方案,你甚至会被选中!在这种情况下,如何重写bean?我的测试有一个@Service注释(类似于@Bean),与原始Bean同名,但它没有覆盖。(冲突BeanDefinitionException)