【问题标题】:Spring boot integration test with environment variables使用环境变量进行 Spring Boot 集成测试
【发布时间】:2021-06-01 12:40:48
【问题描述】:

我正在开发一个使用 Java 8、Spring Boot 2.4.0 的多模块 maven 项目。我想测试一个调用 3rd 方服务的模块。我正在使用wiremock 来模拟第3 方服务调用,并创建了一个spring boot 集成测试类。我的课程与我的 XYZService 课程在同一个包中。我的测试在 src/test/... 中,看起来像这样。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringApplicationClassWithMainMethod.class)
public class XYZServiceIntegrationTest {

@Rule
public WireMockRule externalService = new WireMockRule();

@Test
public void test1() {...}

@Test
public void test2() {...}
}

当我在 Eclipse 中运行 maven 构建时(干净 + 安装)。我的构建没有检测到集成测试所在的 maven-module 中存在的测试。同一模块中的其他单元测试也没有被检测到(注意:在添加集成测试类之前,单元测试正在工作)。 Maven 说测试运行:0。当我右键单击文件并作为 JUnit 测试(Junit 4)运行时,集成测试工作正常。此外,我需要设置一些环境变量来运行我在该集成测试类的配置中设置的 SpringApplicationClassWithMainMethod.class,以便成功加载应用程序上下文(我尝试通过代码加载环境变量和其他堆栈溢出帖子没有任何效果)。通知我的 maven 的另一件事仅使用 Maven surefire 插件来运行测试。我不知道我们是否需要为我的目的使用 Maven 故障安全插件(当我在测试类的顶部添加 2 个注释时,我的测试是否被视为集成测试?)。有人可以帮助我就如何构建父项目提出任何建议。

【问题讨论】:

  • 你使用哪个 Spring Boot 版本?
  • 我使用的是 Spring boot 2.4.0
  • 那么你应该使用 JUnit Jupiter (aka JUnit 5) 而不是 JUnit 4 否则你需要添加 junit-vintage-engine 来运行你的 JUnit 4 测试..
  • 我正在使用 JUnit4 作为电源 Mockito 目前仅支持 JUnit4。此外,在我运行 maven clean & maven install 之前,我的 JUnit4 测试运行正常。只有在我添加了上面的 XYZServiceIntegrationTest 类之后,在 Maven 构建(干净 + 安装)期间没有运行任何测试。
  • 您可以添加<build> 的pom.xml 部分吗?

标签: java spring-boot maven spring-boot-test wiremock


【解决方案1】:

将 maven-failsafe-plugin 添加到我的子 pom 中有效。在父 pom 中,我在继承该插件的子 pom 中添加了 maven-failsafe-plugin 的执行目标。

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 2020-07-24
    • 2021-04-09
    • 2014-08-15
    • 2020-04-09
    • 1970-01-01
    • 2018-05-04
    • 2018-03-22
    相关资源
    最近更新 更多