最近碰到了一些特殊的问题,有些test case在IDE里面运行是可以pass的,但通过Maven运行就一定会出问题。这里不深入讨论,这类测试一般都是和entity manager有关的。今天记录一下在这过程中,maven的一些测试特性:如何用Maven运行特定的test case。
运行一个单独的test
在开发过程中,你有可能需要重复的单独运行一个test class。要用mavan做到这个,需要把test属性设为你想要的test class的名字。(不需要后缀名,如果不小心添加了,也会被mvn去掉)
mvn -Dtest=TestCircle test
如果你pom.xml里面的surefile plugin配置了多个测试层级,有可能你只想执行默认的测试层级:
mvn surefire:test -Dtest=TestCircle
你还可以用表达式来运行一组测试:
mvn -Dtest=TestCi*le test
或者用多个名字/模式,只需要用逗号把他们分开:
mvn -Dtest=TestSquare,TestCi*le test
运行单个test class中的一组测试
在maven-surefire-plugin的2.7.3之后, 你可以运行单个test class中的特定test,语法如下:
(NOTE : 这个功能只能支持Junit 4.x和TestNG)
mvn -Dtest=TestCircle#mytest test
当然还是可以用模式:
mvn -Dtest=TestCircle#test* test
在Surefire Plugin 2.19之后,你还可以这样写:(JUnit 4, JUnit 4.7+ 以及 TestNG):
mvn -Dtest=TestCircle#testOne+testTwo test
支持多格式的模式
在Surefire Plugin 2.19之后,你甚至可以在一条模板中用多种格式: (JUnit 4, JUnit 4.7+, TestNG):
mvn "-Dtest=???Test, !Unstable*, pkg/**/Ci*leTest.java, *Test#test*One+testTwo?????, #fast*+slowTest" test
mvn "-Dtest=Basic*, !%regex[.*.Unstable.*], !%regex[.*.MyTest.class#one.*|two.*], %regex[#fast.*|slow.*]" test
- 其中感叹号 (!) 表示不运行tests.
- 在正则表达式之外的问号 (?) 表示任意一个字符。
- 在使用正则表达式的时候,文件后缀不是必须的。
- 可用/作为路径访问。
pom.xml定义测试
在Surefire Plugin 2.19之后,还可以把要运行的case写到pom.xml中:
<test>my.package.???Test#testMethod, another.package.*</test>
- 列表内容