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

标签 java spring junit

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

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

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

是否有最佳做法正确

这个问题的背景是:我真的只想替换靠近边界的对象(数据库、Web 服务等)

此致

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

最佳答案

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

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

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

关于java - 在 JUnit 测试中更改 Spring 实现对象的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054072/

相关文章:

java - JUnit 找不到 ApplicationContext

java - 无法启动 Activity 组件信息java.lang.nullpointerException?

java - 单击按钮加载 JList

java - 使用 JPA 注释表达审核功能

java - 我们还需要 JUnit 的 Before 注解吗?

java - Xmlbeans setter 在 gradle 测试中不起作用

java - 如何加载 .class 并调用其方法之一

Spring boot多个gradle项目依赖管理->无法更改配置的依赖关系

java - JPA 查询创建顺序由

组合中的 Spring 验证