mvn test vs mvn surefire:test

时间:2018-04-16 09:35:42

标签: maven unit-testing

我正在使用Maven进行一次测试。

以这两种方式运行它的区别在于:

mvn -Dtest=DatabaseTest test

mvn -Dtest=DatabaseTest surefire:test

我可以看到测试显示:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ rac.mybatis ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ rac.mybatis ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ rac.mybatis ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/etomort/smip/oracle-rac/mybatis-rac/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ rac.mybatis ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ rac.mybatis ---
[INFO] Surefire report directory: /home/etomort/smip/oracle-rac/mybatis-rac/target/surefire-reports

surefire:test 显示:

[INFO] --- maven-surefire-plugin:2.12.4:test (default-cli) @ rac.mybatis ---
[INFO] Surefire report directory: /home/etomort/smip/oracle-rac/mybatis-rac/target/surefire-reports

This question有非常有价值的解释,虽然目前的一个指出了人们可能面临的典型疑问,这是一个非常具体的用例。 @Shadow提供的答案澄清了这一点。可以参考maven-lifecycle-vs-phase-vs-plugin-vs-goal问题来拓宽和深入理解Maven的工作方式。

2 个答案:

答案 0 :(得分:2)

不同之处在于test运行完整构建到执行测试的点,而surefire:test仅执行测试,重新使用先前构建的中间结果。

所以,如果你是编辑测试并且只运行surefire:test,新版本的测试将不会被编译,因此Maven将执行一些旧版本的测试。一般来说,很难说以这种方式执行哪个版本的测试,因此这就是人们通常使用mvn clean test而不是mvn surefire:test的原因。

答案 1 :(得分:1)

test是一个生命周期阶段,因为Maven是基于会议的, 这意味着默认情况下每个阶段都有某些插件Cloud Storage tab

您也可以将自己添加到某个阶段 但您也可以手动调用插件的目标 mvn plugin:goal

Surefire是官方测试插件,必将进入测试阶段。