【问题标题】:TestNG Cannot find class in classpath once a new scala class is added to the suite.xml file将新的 scala 类添加到 suite.xml 文件后,TestNG 无法在类路径中找到类
【发布时间】:2014-09-21 19:12:00
【问题描述】:

似乎这是关于 SO 的一个非常“流行”的问题,没有明确的解决方法,但我还是在问这个问题,因为我可以提供更多细节。我正在使用 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 update project 的常规动作,然后进行刷新。然后我重新安装 testNG IDE 并试一试相同的 xml。没有骰子。

坦率地说,this smells like a test-ng plugin-based issue 缓存了一些它不愿意清除的错误。我尝试运行同一个项目的任何其他测试套件 xml 文件,他们都抱怨同样的错误!所以基本上我所有的 testSuite xml 都无法使用。

有人对后续步骤有什么建议吗?我试图在 IDE 中完成所有这些工作,而不是转移到终端并通过那里运行 testNG。如果您认为此时不值得,请发表评论。

【问题讨论】:

    标签: java scala eclipse-plugin testng


    【解决方案1】:

    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>
    

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 2011-11-27
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多