提问者:小点点

mvn测试vs mvn surefire:测试


我正在使用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

虽然万无一失:测试显示:

[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

这个问题有非常有价值的解释,尽管当前的一个问题指向了一个可以面对的典型疑问,并且是一个非常具体的用例。@影子提供的答案澄清了它。可以参考maven-生命周期-vs-阶段-vs-plugin-vs-目标问题来拓宽和更深入地理解Maven的工作方式。


共2个答案

匿名用户

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

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

匿名用户

test是一个生命周期阶段,由于Maven是基于约定的,这意味着默认情况下已经有某些插件绑定到每个阶段。

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

Surefire是官方测试插件,绑定在测试阶段。