Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven mvn spring引导插件打破了集成测试_Maven_Spring Boot_Integration Testing_Junit5_Maven Failsafe Plugin - Fatal编程技术网

Maven mvn spring引导插件打破了集成测试

Maven mvn spring引导插件打破了集成测试,maven,spring-boot,integration-testing,junit5,maven-failsafe-plugin,Maven,Spring Boot,Integration Testing,Junit5,Maven Failsafe Plugin,我与maven failsafe plugin和JUnit5的集成测试最初很难设置,但现在可以工作了: plugins: - artifactId: maven-failsafe-plugin groupId: org.apache.maven.plugins version: 2.19.1 dependencies: - artifactId: junit-platform-surefire-provider groupId: org.j

我与
maven failsafe plugin
JUnit5
的集成测试最初很难设置,但现在可以工作了:

plugins:
  - artifactId: maven-failsafe-plugin
    groupId: org.apache.maven.plugins
    version: 2.19.1
    dependencies:
      - artifactId: junit-platform-surefire-provider
        groupId: org.junit.platform
        version: 1.0.3
      - artifactId: junit-jupiter-engine
        groupId: org.junit.jupiter
        version: 5.1.1
    configuration:
        includes:
          - v3api/*IntegrationTests.java
    executions:
      - goals: [ integration-test, verify ]
然而,我想把这个工件变成一个大罐子,看起来好像
spring boot maven plugin
maven failsafe plugin
冲突,因为如果我把这个配置放到我的pom中

  - artifactId: spring-boot-maven-plugin
    groupId: org.springframework.boot
    version: ${spring.boot.version}
    executions:
      - goals: [ repackage ]
    configuration:
        fork: true
        executable: true
        outputDirectory: ${project.build.directory}/binary
然后,我在集成测试中出现了以下错误:

Jun 05, 2018 3:03:15 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.NoClassDefFoundError: com/adam/api/DbAccess
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetPublicMethods(Class.java:2902)
    at java.lang.Class.getMethods(Class.java:1615)
    at org.junit.platform.commons.util.ReflectionUtils.getDefaultMethods(ReflectionUtils.java:1024)
    at org.junit.platform.commons.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:997)
    at org.junit.platform.commons.util.ReflectionUtils.findAllMethodsInHierarchy(ReflectionUtils.java:939)
    at org.junit.platform.commons.util.ReflectionUtils.findMethods(ReflectionUtils.java:923)
    at org.junit.platform.commons.util.ReflectionUtils.findMethods(ReflectionUtils.java:909)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveContainedMethods(JavaElementsResolver.java:189)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveChildren(JavaElementsResolver.java:177)
    at java.lang.Iterable.forEach(Iterable.java:75)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveClass(JavaElementsResolver.java:61)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.lambda$resolve$3(DiscoverySelectorResolver.java:69)
    at java.util.ArrayList.forEach(ArrayList.java:1249)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolve(DiscoverySelectorResolver.java:68)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:50)
    at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:61)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:130)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:117)
    at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:82)
    at org.junit.platform.surefire.provider.TestPlanScannerFilter.accept(TestPlanScannerFilter.java:50)
    at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:98)
    at org.junit.platform.surefire.provider.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:121)
    at org.junit.platform.surefire.provider.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:111)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
Caused by: java.lang.ClassNotFoundException: com.adam.api.DbAccess
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 28 more

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
在本文中,他们描述了如何将插件配置为启动和停止spring boot应用程序,以便在集成测试前和集成测试后的生命周期阶段进行集成测试

我的应用程序的生命周期在docker和kubernetes方面略有不同。事情是这样的:

  • 包装罐子
  • 使用spring引导插件将jar变成胖jar
  • 加码
  • 将其安装到docker注册表
  • 部署到开发人员
  • 集成测试
  • 将构建从开发人员提升到测试人员
  • 部署测试
我已经尝试将spring启动插件绑定到
阶段,但这对错误没有影响

除了spring boot生命周期阶段的问题外,它还可能与JUnit5有很大关系,因为
maven failsafe plugin
似乎接近JUnit5不支持的程度:


我在上也看到了这一点,但它对集成测试没有帮助。

我使用这些分层结构的插件完成了这一点:

Parent
|
 \pom.xml (Added tests plugins including maven-failsafe-plugin)
|
 \ application-startup
   |
    \ pom.xml (Added spring-boot-maven-plugin)

通过这种方式,您的所有子项目都将被测试,并且只有在测试之后,maven才会在一个胖罐子中进行组装。

以下内容适合我:

      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${springboot.version}</version>
        <executions>
          <execution>
            <!-- repackage will break the integration-test class-path, so schedule after -->
            <phase>post-integration-test</phase>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

org.springframework.boot
springbootmaven插件
${springboot.version}
整合后测试
重新包装
我可以通过以下方式运行集成测试:
mvn verify


SpringBoot通过以下方式启动:
java-jar target/my jar.jar

可能是由Spring自定义加载程序引起的:,如果集成测试在不同的模块中呢?