似乎这是一个非常“流行”的问题,没有明确的解决方法,但我还是要问这个问题,因为我可以提供更多细节。我正在使用 STS v3.4.0.RELEASE 和 TestNG v6.8.6.20141201_2240。我还有 Eclipse 3.0.4.v-2_11-201407232043 的 ScalaIDE 插件。
我有一个简单的测试(我的 src/test/java 中的 MusicalTest.java)及其相应的 testsuite.xml 文件,该文件概述了此类以及要包含的特定方法。我将 xml 文件作为 TestNG 测试运行,没有任何问题,一切都按预期运行;我的 testsuite.xml 文件看起来像这样:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="1" verbose="1" name="Fishy Tests"
skipfailedinvocationcounts="false" junit="false" parallel="methods"
data-provider-thread-count="1" annotations="JDK">
<test verbose="2" name="MusicalTestSuite" annotations="JDK" preserve-order="true">
<classes>
<class name="com.rock.and.roll.MusicalTest"/>
</classes>
</test>
</suite>
现在我创建一个名为 MusicalScalaTest.scala 的新类(在我的例子中,我在与上述测试相同的包中创建了一个 Scala 类)。我继续将其包含在我的 testsuite.xml 中,如下所示:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="1" verbose="1" name="Fishy Tests"
skipfailedinvocationcounts="false" junit="false" parallel="methods"
data-provider-thread-count="1" annotations="JDK">
<test verbose="2" name="MusicalTestSuite" annotations="JDK" preserve-order="true">
<classes>
<class name="com.rock.and.roll.MusicalTest"/>
<class name="com.rock.and.roll.MusicalScalaTest"/>
</classes>
</test>
</suite>
现在当我运行 xml 文件作为 testNG 测试时,我遇到了以下错误:
org.testng.TestNGException:
Cannot find class in classpath: com.rock.and.roll.MusicalTest
at org.testng.xml.XmlClass.loadClass(XmlClass.java:81)
at org.testng.xml.XmlClass.init(XmlClass.java:73)
at org.testng.xml.XmlClass.<init>(XmlClass.java:59)
at org.testng.xml.TestNGContentHandler.startElement(TestNGContentHandler.java:543)
at ........ <truncated>
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
有趣的是,它不会抱怨 MusicalScalaTest,而是抱怨 MusicalTest。我继续注释掉 XML 文件中的 MusicalScalaTest 类,认为这就是造成混淆的原因,但在运行 testNG 测试时,我再次遇到同样的错误!在此之后,我删除了 MusicalScalaTest.scala 类并从 xml 中删除了“注释”行。没有骰子。我右键单击该项目并执行 Run As -> Mvn Clean。没有骰子。我重新启动我的 IDE,执行 Mvn Clean 和 Maven 更新项目,然后刷新。没有骰子。我卸载了 testNG 插件,运行 mvn clean test-compile 以确保确定,然后执行 maven 更新项目的常规动作,然后进行刷新。然后我重新安装 testNG IDE 并尝试使用相同的 xml。没有骰子。
坦率地说这闻起来像是一个基于 test-ng 插件的问题,它缓存了一些它不愿意清除的错误。我尝试运行同一项目的任何其他测试套件 xml 文件,它们都在抱怨相同的错误!所以基本上我所有的 testSuite xml 都失效了。
有人对下一步有什么建议吗?我试图在 IDE 中完成所有这些工作,而不是转移到终端并通过那里运行 testNG。如果您认为此时不值得,请发表评论。
FWIW,为我解决问题的方法是将我的 JDK 升级到最新版本(撰写本文时为 1.7.0_65),确保它是 IDE 选择的默认库。此外,在跳转多个 IDE(上面提到的 STS 和最新的 Eclipse Luna)之后,我决定使用 Typsafe Scala IDE 而不是 Eclipse 的 ScalaIDE 插件。不要忘记将其添加到 pom.xml 中:
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.10</artifactId>
<version>2.0</version>
<scope>test</scope>
</dependency>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.1.5</version>
<executions>
<execution>
<id>scala-compile-first</id>
<phase>process-resources</phase>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>