mvn包失败,因为没有runnable方法但在eclipse中运行junit test是可以的

时间:2015-12-30 07:47:41

标签: junit spring-boot maven-3

Spring启动项目,有一个Web集成测试,当在eclipse中执行它时(运行为> 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测试不需要明确指定抽象?

1 个答案:

答案 0 :(得分: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视为测试套件。