【问题标题】:How do I load environment variables to load application context before integration test runs如何在集成测试运行之前加载环境变量以加载应用程序上下文
【发布时间】:2021-06-03 11:04:43
【问题描述】:

我正在使用 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 上下文之前使用这些环境变量。

试用一: 我尝试使用 @TestPropertySource(properties = {"key1=val1", "key2=val2"}) 注释,但没有用。

试用 2: 我也尝试过静态块来设置不起作用的环境变量。

试用 3: 我还尝试将 @ContextConfiguration 与 ApplicationContextInitializer 类一起使用,但效果不佳。

所有这些使用 maven 构建项目的尝试只会导致

IllegalState 无法加载 ApplicationContext

上述测试类的错误。有什么方法可以在加载应用程序上下文之前加载环境变量?

【问题讨论】:

    标签: java spring spring-boot maven integration-testing


    【解决方案1】:

    我认为 maven 中集成测试的正确类命名约定是 XYZServiceIT,因为 *Test 是为已经在应用程序上下文之前运行的单元测试保留的。如果需要,您可以在 maven pom 中更改它,或者简单地使用传统命名。

    更新

    要将环境变量传递给 maven 以进行集成测试,请使用以下命令:

    1. 确保您从 eclipse 市场安装了 M2E(在菜单 > 帮助 > eclipse 市场中找到)

    1. 右键单击您的项目 > 运行方式 ... > 4 Maven 构建 ... PS:之后,如果您以后需要重新运行测试,您可以在顶部的绿色箭头下拉菜单和运行配置设置中找到您的运行配置

    1. 使用verify -Dkey=val 或在底部变量部分内联(用于maven 目标命令)配置maven 环境参数。都适用于单元测试和集成测试。环境通常不适用于测试阶段。 (如果您没有 JDK 作为运行程序,则会收到错误消息。如果需要,请按照此帖子进行修复:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

    我希望这会有所帮助。如果需要,您还可以更改 pom.xml 配置文件,但我不建议这样做。

    【讨论】:

    • 我实际上将类作为 XYZServiceIT 及其工作。问题是我无法加载应用程序上下文。我需要在加载应用程序上下文之前加载环境变量。
    • 我不知道你缺少哪些环境变量。您是在 java 命令行中使用 -Dkey=value 还是在代码中使用 System.setProperty 或完全不同的东西(例如配置文件中的 spring 变量)输入它们?
    • 我在 Eclipse 中设置了一些变量。例如,当我运行 SpringApplicationClassWithMainMethod.class 时,我通过右键单击 > 配置 > 环境设置了一些环境变量。每当我想运行 SpringApplicationClassWithMainMethod 类时,我都需要这些变量。因为我正在使用该类进行集成测试。当 maven 执行这些集成测试时,我需要加载这些环境变量
    • 您可以为 Java 应用程序部分的“运行配置”设置它们。这样只有java 会在正常的应用程序运行期间获得它们。 Maven 通常使用另一个命令,maven build 或更准确的mvn verify 在您的情况下。我猜你也需要在 Maven Build 部分设置环境变量。
    • 如何在 Maven 中设置环境变量?你能给我举个例子吗,假设我有 2 个环境变量,key1=val1, key2=val2 如何在 maven 中设置这些?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2020-04-19
    • 2021-11-18
    相关资源
    最近更新 更多