方法取决于不存在的组--Testng

时间:2012-02-16 13:54:49

标签: java xml testing testng legacy

我正在尝试创建两个测试,其中一个依赖于另一个的执行。我正在处理的项目充满了遗留代码,所以我试图使应用程序的主要部分可测试。第一个测试基本上会尝试创建一些与数据库的连接并设置一些静态变量。然后,Test2将使用连接和变量来插入一些数据。我宁愿不再做Test1在Test2中再做一次的事情。

我已经使Test2依赖于test1,因此如果Test1失败,Test2将不会执行。但如果Test2失败,我希望它能够重新运行。当我在Intellij IDEA中尝试这个时,我得到以下结果:

java.lang.Throwable: Method a.stack.Test2.failingTest() depends on nonexistent group "FirstTest"

我错过了什么?

测试1:

package a.stack;

import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;

/**
* The First test
*/
@Test(groups = {"FirstTest"})
public class Test1 {

    public void init(){
        // Initialize something which other tests should use
        Assert.assertTrue(true);
    }
}

和Test2:

package a.stack;

import org.testng.Assert;
import org.testng.annotations.Test;

/**
*
*/
@Test(groups = {"OtherTests"}, dependsOnGroups = {"FirstTest"})
public class Test2 {
    public void failingTest(){
        Assert.assertTrue(false);
    }
}

的testng.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="test" verbose="1">
    <test name="basic" junit="false">
        <groups>
            <run>
                <include name="FirstTest"/>
                <include name="OtherTests"/>
            </run>
        </groups>
        <packages>
            <package name="a.*"/>
        </packages>
    </test>
</suite>

4 个答案:

答案 0 :(得分:0)

您确定您指定的包中包含该组中的方法吗?

答案 1 :(得分:0)

如果套件中的测试失败,则会在输出目录中创建testng-failed.xml文件,该文件用于重新运行失败的案例。 你能否检查一下这个文件,以确保xml文件包含哪些组而不仅仅是其他实际失败的OtherTests?

 <run>
      <include name="FirstTest"/>
      <include name="OtherTests"/>
 </run>

因为如果它没有组FirstTest那么错误 depends on nonexistent group "FirstTest"被抛出。

答案 2 :(得分:0)

您的组代码在testng.xml中不正确,因为它应该包含程序包名称

    <groups>
        <run>
            <include name="packagename.FirstTest"/>
            <include name="packagename.OtherTests"/>
        </run>
    </groups>

然后在组标记后包含带有包名称的类[这是可选的,因为您已经在使用包名称]

  <class name="packagename.classname1"/>
  <class name="packagename.classname2"/>

代码现在应该可以使用

答案 3 :(得分:0)

总是可行的另一种方法是使用左侧的绿色胡萝卜符号从程序包而不是特定类中运行测试。这是跑步时的常见错误,取决于dependsOnGroups

enter image description here