【问题标题】:Run JUnit 5 tests contained in JAR with JUnit 5 Console Launcher使用 JUnit 5 控制台启动器运行 JAR 中包含的 JUnit 5 测试
【发布时间】:2020-05-18 12:40:05
【问题描述】:

我有一个名为 smoke-tests-fat-1.0.0-SNAPSHOT.jar 的胖 JAR,其中包含 JUnit 5 测试。测试在方法级别使用org.junit.jupiter.api.Test 进行注释。

我现在想使用 JUnit 5 Console Launcher 执行这些测试。但是,我似乎无法正确处理。

我试过了:

  • java -jar junit-platform-console-standalone.jar --classpath smoke-tests-fat-1.0.0-SNAPSHOT.jar --scan-classpath
  • java -jar junit-platform-console-standalone.jar --classpath smoke-tests-fat-1.0.0-SNAPSHOT.jar --select-package=my.package

但是这两个命令都不起作用。控制台启动器永远找不到任何测试。

如何让控制台启动器执行 JAR 中包含的 JUnit 5 测试?

【问题讨论】:

    标签: java testing junit command-line junit5


    【解决方案1】:

    根据这个经过测试的答案https://stackoverflow.com/a/52373592/1431016 它应该按照您尝试的方式工作。

    • 您的测试类命名是否与默认测试类名称模式的要求一致? IE。以Test 开头还是以Test[s] 结尾?
    • fat JAR 文件的内容是否打包正确? IE。匹配目录树和包名结构?

    如果您的测试类遵循不同的命名模式,您可以通过-n, --include-classname=PATTERN 选项将您的模式传递给控制台启动器,而不是重命名它们:

    --include-classname=PATTERN
                                 Provide a regular expression to include only classes whose
                                   fully qualified names match. To avoid loading classes
                                   unnecessarily, the default pattern only includes class
                                   names that begin with "Test" or end with "Test" or
                                   "Tests". When this option is repeated, all patterns will
                                   be combined using OR semantics. Default: [^(Test.*|.+[.$]
                                   Test.*|.*Tests?)$]
    

    【讨论】:

      【解决方案2】:

      类似的东西

              LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                  .selectors(
                          selectPackage("com.bla.blapackage")          
                  )
                  .filters(
                          includeClassNamePatterns(ClassNameFilter.STANDARD_INCLUDE_PATTERN)
                  )
                  .build();
      

      或者对于spring-boot fat jar,其实不是fat jar,需要选择每个类。

                  LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                  .selectors(
                         
                          selectClass(ValidationTest.class)
                  )
      
                  .build();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 1970-01-01
        • 2020-03-25
        • 2020-12-31
        相关资源
        最近更新 更多