为什么TestNG会看到我的包裹而不是我的课程?

时间:2012-10-23 20:00:21

标签: java classpath testng

运行时(Windows 7命令行):

C:\ rest-app \ src \ main \ java \ com \ mycompany \ app \ Test> java org.testng.TestNG testng.xml

我明白了:

===============================================

Suite1 总测试运行:0,失败:0,跳过:0

===============================================

这是我的testng.xml文件的样子:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="SandBoxTests"   >
    <packages>
        <package name="com.mycompany.app.Test" />
    </packages>
</test>
</suite>

我的课程中有三个测试。

当我将testng.xml文件更改为:

<suite name="Suite1" verbose="1" >
<test name="SandBoxTests"   >
    <classes>
        <class name="com.mycompany.app.Test.SandBoxTests">
            <methods>
                <include name="com.mycompany.app.Test.SandBoxTests.TestA"/>
            </methods>
        </class>
    </classes>
 </test>
</suite>

我收到回复:

[TestNG] [错误] 在类路径中找不到类:com.mycompany.app.Test.SandBoxTests

我的类路径如下:

C:\ rest-app \ lib \ *; C:\ rest-app \ src \ main \ java \ com \ mycompany \ app \ Test \ *

第一个目录指向我所有包含的.jar文件,包括testng,最后一个目录包含我正在尝试运行测试的类文件的位置。我的testng.xml文件也在那里。

那么TestNG看起来怎么样才能找到我的包,但是没看到我的课呢?

我的代码是:

package com.mycompany.app.Test;

import com.mycompany.app.RestMethods;
import com.mycompany.app.Test.TestObjects.AutoCompleteList;
import com.mycompany.app.Test.TestObjects.AutocompleteItem;
import com.mycompany.app.Test.TestObjects.Title;
import com.thoughtworks.xstream.XStream;
import org.apache.http.HttpResponse;
import org.testng.Reporter;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import static org.junit.Assert.assertTrue;


public class SandBoxTests

{     ...

@BeforeClass
public void SetupSandBoxTests() throws Exception
{

}

@Test
public void TestA() throws Exception
{
    ...
}

...
}

编辑:我更新了我的类路径以包含具有我的TestNG测试的已编译源文件的位置,还包括包含我的testng.xml文件的路径的根,但没有任何更改。我补充说:

C:\ rest-app \ out \ production \ Main \ *; C:\ rest-app \ out \ production \ Main \ com \ homeaway \ app \ Test \ *

编辑10/25:Maven现在正确构建并执行测试,但我仍然无法从命令行执行testng。为了让Maven运行我的测试我必须使用

<includes>
    <include>**/*.java</include>
</includes>

而不是:

<suiteXmlFiles>
    <suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>

4 个答案:

答案 0 :(得分:0)

您的类路径应该指向包的起始位置,而不是java文件本身。

将testng.xml移动到src / main / java并使用此类路径:

C:\其余应用内\ lib中*; C:\其余应用内的\ src \主\的java \

编辑: 我意识到你实际上是在尝试直接运行测试套件。这需要在已编译的测试类上完成 - 您的类路径应该指向二进制文件。

但是,如果您使用默认设置,则由maven全部处理:

src/main/java/ <- your java code
src/test/java/ <- your test code where test-classes are named *Test.java

在你的pom.xml中:

<dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.3.1</version>
      <scope>test</scope>
    </dependency>

请参阅:http://maven.apache.org/plugins/maven-surefire-plugin/examples/testng.html

答案 1 :(得分:0)

您的项目可能无法编译您的源文件。你使用maven来执行测试吗?

答案 2 :(得分:0)

你试过吗

<suite name="Suite1" verbose="1" >
<test name="SandBoxTests"   >
    <classes>
        <class name="com.mycompany.app.Test.SandBoxTests">
            <methods>
                <include name="TestA"/>
            </methods>
        </class>
    </classes>
 </test>
</suite>

我认为在方法下它不是在搜索整个类路径。我没试过这个。但这应该有用

答案 3 :(得分:0)

我认为你的类路径不正确。包含*的类路径条目与类文件不匹配。您可以参考this获取一些想法。 如果您的课程位于C:\rest-app\out\production\Main\com\homeaway\app\Test\,那么 com\urco\app\Test是包名称的一部分,所以我认为你应该只在你的类路径中放置C:\ rest-app \ out \ production \ Main \。

希望有所帮助..