TestNG 一旦将新的 Scala 类添加到 suite.xml 文件中,就无法在类路径中找到类

问题描述 投票:0回答:1

似乎这是一个非常“流行”的问题,没有明确的解决方法,但我还是要问这个问题,因为我可以提供更多细节。我正在使用 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。如果您认为此时不值得,请发表评论。

java scala eclipse-plugin testng
1个回答
0
投票

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>
© www.soinside.com 2019 - 2024. All rights reserved.