TestNG错误:在类路径中找不到类

35

我试图通过命令行运行testng,并将以下内容添加到类路径中:

  • testng jar,已编译的测试案例文件的jar以及其他所需的jars。
  • testng.xml 指向层次结构中适当的类。

但是Testng没有运行,反而抛出了以下异常:

[TestNG] [ERROR]  Cannot find class in classpath: (name of testcase file)

我之前也遇到了同样的问题,当时我只是添加了classpath,问题就得到了解决。但这一次似乎并没有解决。有什么其他的解决方法吗?


我遇到了同样的问题,按照这些步骤帮助我解决了它。 - Tilak M Divakar
31个回答

47

我刚遇到了这个问题,我非常有信心说这是Eclipse的TestNG插件中的一个错误,因为我能够从命令行成功地运行我的测试。

对我和其他人似乎有效的解决方法只是清除你的项目(ProjectClean)。有一个人不得不重新安装整个插件。


5
如果使用Maven,对项目进行清理并更新后对我很有帮助。 - ovejaexiste
在Eclipse中,转到“问题”选项卡,首先检查您的项目是否未列在其中并出现关键错误:例如“在修复错误X之前无法构建项目”。一旦这些错误被修复,您可以执行“项目”->“清理”。 - HRVHackers
每当我在Eclipse中搜索问题时,我总是会发现建议清理项目,并且我可以看到人们评论说它对他们有用,但它从未对我起作用,我不得不寻找其他选项。这是有原因的吗? - Atul Chavan

23
如果你的包名为FabFurnishPackage,类名为registration,则xml中的代码应该是:
<classes>
<class name="FabFurnishPackage.registration">
</classes>

[TestNG] [ERROR] 无法在类路径中找到类: registration 问题已经解决...


12

我曾经遇到过同样的问题,尝试的解决方法如下:

  1. 清理项目(右键点击 pom.xml 并选择 clean)
  2. 更新 Maven 项目(选择 Project > Maven > Update Maven Project)

这样就解决了该问题。


9

只需要在Eclipse中进行以下操作:Project > Clean,并再次运行测试案例,应该就能正常工作了。

它的后台操作是调用mvn eclipse:clean命令来删除项目目录下的.project和.classpath文件,你也可以运行mvn eclipse:eclipse命令重新生成.project和.classpath文件,从而将所需的类添加到classpath中。


6

添加到pom文件中:

        <build>
            <sourceDirectory>${basedir}/src</sourceDirectory>
            <testSourceDirectory>${basedir}/test</testSourceDirectory>
             (...)
            <plugins>
                (...)
            </plugins>
        </build>

这对我有用,但我不明白为什么 - 你能解释一下吗? - nyarasha
1
@nyarasha 这个解决方案对我很有效。如果我要猜测的话,可能是因为Maven向TestNG提供了这些包潜在存储的目录,然后TestNG开始递归查找。即使只提供${baseDir}也应该像我一样工作。问题似乎是根本没有提供目录。我不确定它默认搜索的位置在哪里,但是在项目中提供一个有效的目录允许TestNG遍历并找到包的位置。然后,Maven能够将每个包的更改构建到target/文件夹中并运行。 - JoryAnderson

4

请确保您的suite.xml文件不要有.java扩展名。

例如:

<test name="Test C1">
    <classes>
        <class name="com.taxi.suiteC.TestCase_C1" ></class>  
    </classes>
</test>

4
在从命令提示符运行testng.xml文件之前,请检查以下内容是否缺失:
  1. 在命令提示符中,确保您正在导航到存放testng.xml文件的文件夹。
  2. 在导航到该文件夹后,使用set CLASSPATH并包含您项目中所有.class文件所在的bin文件夹、testng jar文件位置和selenium-server jar文件位置(如果您正在使用selenium webdriver)。
    例如:set CLASSPATH=C:\Selenium\testng-5.8-jdk15.jar;C:\Selenium\selenium-server-standalone-2.31.0.jar;C:\SeleniumTests\YourProject\bin
  3. 现在运行命令java org.testng.TestNG testng.xml.
我曾经遇到同样的情况,但以上方法对我有用。

这个起作用了。非常感谢。在Ubuntu中,我将类路径设置为以下路径:/home/user/eclipse-workspace/seleniumGrid/lib/json.jar:/home/user/eclipse-workspace/seleniumGrid/lib/selenium-server-standalone-3.13.0.jar:/home/user/eclipse-workspace/seleniumGrid/lib/testng-6.7.jar:/home/user/eclipse-workspace/seleniumGrid/bin - mrtechmaker
你可以在你的~/.bashrc文件中永久添加classpath路径:CLASSPATH=/home/user/eclipse-workspace/seleniumGrid/lib/json.jar:/home/user/eclipse-workspace/seleniumGrid/lib/selenium-server-standalone-3.13.0.jar:/home/user/eclipse-workspace/seleniumGrid/lib/testng-6.7.jar:/home/user/eclipse-workspace/seleniumGrid/bin - mrtechmaker

3
在Intellij中,对我有帮助的解决方法是打开右侧的Maven工具栏,选择“Clean”、“install”并点击“Play”按钮:see screenshot

1
请确保您在TestNG.xml文件中指定了您的类/包。
<test name="test1" preserve-order="false">
    <classes>
        <class name="ABC"/>
    </classes>
</test>


1
如果以上答案都不可行,您可以在IDE中运行测试,获取类路径并将其用于命令中。 例如:如果您使用的是Intellij IDEA,则可以在控制台顶部找到它(如下面的屏幕截图所示)。 Intellij Console 单击突出显示的部分可展开并显示完整的类路径。
您需要删除文件夹内的jar引用:JetBrains\IntelliJ IDEA Community Edition VERSION java -cp "path_copied" org.testng.TestNG testng.xml 如果项目是Maven项目,则可以添加Maven Surefire插件并提供testng套件XML文件路径,导航到项目目录并运行命令:mvn clean install test
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>config/testrun_config.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接