java - 如何在集成测试运行之前加载环境变量以加载应用程序上下文
问题描述
我正在使用 Spring Boot 2.4.0 开发多模块 maven 项目。我已经为一个模块编写了集成测试。测试类看起来与此类似。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringApplicationClassWithMainMethod.class)
public class XYZServiceIT {
@Test
public void test1() {...}
@Test
public void test2() {...}
}
要运行 SpringApplicationClassWithMainMethod.class 即,为了加载应用程序上下文,我需要在 eclipse 中设置的几个环境变量。因此,为了在加载 SpringApplicationClassWithMainMethod.class 时运行上述集成测试,我需要在加载 Application 上下文之前使用这些环境变量。
试用 1:我尝试使用 @TestPropertySource(properties = {"key1=val1", "key2=val2"}) 注释,但没有用。
试验 2:我还尝试了静态块来设置不起作用的环境变量。
试验 3:我还尝试将 @ContextConfiguration 与 ApplicationContextInitializer 类一起使用,但效果不佳。
所有这些使用 maven 构建项目的尝试只会导致
IllegalState 无法加载 ApplicationContext
上述测试类的错误。有什么方法可以在加载应用程序上下文之前加载环境变量?
解决方案
我认为 maven 中集成测试的正确类命名约定是XYZServiceIT
因为*Test
已为在应用程序上下文之前运行的单元测试保留。如果需要,您可以在 maven pom 中更改它,或者简单地坚持常规命名。
更新
要将环境变量传递给 Maven 以进行集成测试,请使用以下命令:
- 确保您从 Eclipse 市场安装了 M2E(在菜单 > 帮助 > Eclipse 市场中找到)
- 右键单击您的项目 > Run As ... > 4 Maven Build ... PS:之后,如果您需要重新运行测试,您可以在绿色箭头下拉菜单下方的顶部和运行配置设置中找到您的运行配置未来
verify -Dkey=val
使用或在底部变量部分内联(用于 maven 目标命令)配置 maven 环境参数。都适用于单元测试和集成测试。环境通常不适用于测试阶段。(如果您没有 JDK 作为运行程序,您将收到错误。如果需要,请按照此帖子修复它:此环境中未提供编译器。也许您在 JRE 而不是 JDK 上运行?)
我希望这会有所帮助。如果需要,您还可以更改 pom.xml 配置文件,但我不建议这样做。
推荐阅读
- java - 检查带参数的方法是否有参数?
- javascript - 如何在 Laravel 或其他框架中正确编写表单?
- base64 - 如何将散景图转换为 BytesIO 对象以使用 base64 模块对图进行编码
- c# - XCEED PropertyGrid 可以接受结构吗?
- node.js - 通过angularjs上传文件对象文件但它被转换为字符串,如何在服务器端接收对象文件
- javascript - js函数看不到ng-repeat里面的元素
- python - 如何在 X_train、y_train、X_test、y_test 中拆分图像数据集?
- javascript - 在通过交换源的脚本后,单击按钮时需要 JavaScript 将图像源重置为原始
- windows - 检查是否存在带有批处理文件的 PostgresSQL DB 并将自定义值输出到文本文件
- ruby - 如何将 Launchy gem 用于数组?