2

当我运行时(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

4 回答 4

0

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

将你的 testng.xml 移动到 src/main/java 并使用这个类路径:

C:\rest-app\lib*;C:\rest-app\src\main\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

于 2012-10-23T20:05:33.713 回答
0

我认为您的类路径不正确。包含 * 的类路径条目将不匹配类文件。你可以参考这个来获得一些想法。如果你的类位于C:\rest-app\out\production\Main\com\homeaway\app\Test\, then com\urco\app\Test是包名的一部分,所以我认为你应该只把 C:\rest-app\out\production\Main\ 放在你的类路径中。

希望有帮助..

于 2012-10-25T12:44:41.037 回答
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>

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

于 2012-10-25T12:27:08.400 回答
0

您的源文件可能不会被您的项目编译。您是否使用 maven 执行测试?

于 2012-10-23T20:06:52.877 回答