【问题标题】:mvn package failed because no runnable methods but run junit test in eclipse is okmvn 包失败,因为没有可运行的方法,但在 Eclipse 中运行 junit 测试没问题
【发布时间】:2015-12-30 07:47:40
【问题描述】:

Spring boot项目,有一个web集成测试,在eclipse中执行(run as > junit test)就可以了。

public class ReservationControllerIntegrationTest extends BaseWebIntegrationTest{...}

但是在运行 mvn clean package 时,遇到以下错误:

initializationError(com.foo.web.BaseWebIntegrationTest)  Time elapsed: 0.005 sec  <<< ERROR!
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:140)

当我改变时

public class BaseWebIntegrationTest

public abstract class BaseWebIntegrationTest

然后再次运行mvn clean package,这次构建成功! 那么为什么在eclipse中运行junit test不需要明确指定abstract呢?

【问题讨论】:

    标签: junit spring-boot maven-3


    【解决方案1】:

    mvn surefire 插件根据一些简单的规则自动检测测试套件,这些规则应用于它在src/main/test 下找到的所有类。特别是,它会查找与特定命名约定匹配的所有具体类。

    https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

    在您的情况下,插件认为 BaseWebIntegrationTest 是一个测试套件,因为它符合命名约定,但它没有在其中找到任何测试方法。当你创建类abstract 时,插件跳过了它,因为它不再是可实例化的。您还可以重命名该类,使其不以单词 Test 结尾。

    当您在 Eclipse 中运行测试时,我猜您会运行特定的集成测试 (ReservationControllerIntegrationTest),因此 Eclipse 不会尝试将 BaseWebIntegrationTest 视为测试套件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      相关资源
      最近更新 更多