最近在项目中,使用unitils框架来进行测试,整合了Junit,Mockito等工具。所有的东西都配置好后,启动maven test 突然间报告如下的错误:
Configuring TestNG with: TestNGMapConfigurator
org.testng.TestNGException:
Failure in JUnit mode for class test.validator.TestTestor: could not create/run JUnit test suite:
cannot retrieve JUnit method
at org.testng.junit.JUnitTestRunner.runFailed(JUnitTestRunner.java:231)
at org.testng.junit.JUnitTestRunner.start(JUnitTestRunner.java:224)
at org.testng.junit.JUnitTestRunner.run(JUnitTestRunner.java:205)
at org.testng.TestRunner$2.run(TestRunner.java:536)
at org.testng.TestRunner.runWorkers(TestRunner.java:712)
at org.testng.TestRunner.privateRunJUnit(TestRunner.java:548)
at org.testng.TestRunner.run(TestRunner.java:474)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:324)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292)
at org.testng.SuiteRunner.run(SuiteRunner.java:198)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:821)
at org.testng.TestNG.runSuitesLocally(TestNG.java:788)
at org.testng.TestNG.run(TestNG.java:708)
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:115)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeSingleClass(TestNGDirectoryTestSuite.java:129)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:113)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:111)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
一开始还以为是自己的测试用例写错了,导致Maven无法找到测试方法,后来仔细的查了一下资料,才发现,这个问题原来是TestNG和Junit冲突的问题。原来,MAVEN在测试的时候,如果遇到TestNG貌似会先去执行TestNG的框架进行测试,而不是使用Junit 而我的测试类又是基于Junit的,所以自然无法找到需要测试的方法了。
查了一下资料,在surefire插件中配置了参数:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4-SNAPSHOT</version>
<configuration>
<properties>
<property>
<name>junit</name>
<value>true</value>
</property>
</properties>
</plugin>
据说这样可以让surefire限制性junit的测试。结果试了一下,似乎还是不行。
然后,仔细的检查了一下所有的依赖,发现unitils本身依赖了test-ng的包,于是,排除了unitils对于TestNG的依赖,再试,问题解决,testCase可以正常运行