TestNG依赖来自不同类的OnMethods

时间:2011-10-07 19:42:13

标签: java testing junit automated-tests testng

当要依赖的测试与具有此注释的测试的类相同时,dependsOnMethods注释的@Test属性正常工作。但是,如果待测试方法和依赖方法属于不同的类,则它不起作用。示例如下:

class c1 {
  @Test
  public void verifyConfig() {
    //verify some test config parameters
  }
}

class c2 {
  @Test(dependsOnMethods={"c1.verifyConfig"})
  public void dotest() {
    //Actual test
  }
}

有没有办法解决这个限制?一个简单的方法是在class c2中创建一个调用c1.verifyConfig()的测试。但这会重复太多。

4 个答案:

答案 0 :(得分:31)

将该方法放在group中并使用dependsOnGroups

class c1 {
  @Test(groups={"c1.verifyConfig"})
  public void verifyConfig() {
    //verify some test config parameters
  }
}

class c2 {
  @Test(dependsOnGroups={"c1.verifyConfig"})
  public void dotest() {
    //Actual test
  }
}

建议在@Before *中验证配置,如果出现问题则抛出,这样测试就不会运行。这样,测试可以专注于测试。

class c2 {
  @BeforeClass
  public static void verifyConfig() {
    //verify some test config parameters
    //Usually just throw exceptions
    //Assert statements will work
  }

  @Test
  public void dotest() {
    //Actual test
  }
}

答案 1 :(得分:1)

不能在不同的类中使用DependsOnMethods,要解决此问题,我们可以使用dependsOnGroups;

要更改代码;

1。 DependsOnGroups类;

@Test(groups = {“先决条件”})

console.log

2。调用dependsOnGroups的类;

public void M1()
{

}

3。 xml

@Test(dependsOnGroups={"prerequisites"})
public void M2()

{

}

答案 2 :(得分:0)

您可以在TestNG groups批注中使用dependsOnGroups@Test,如先前的答案所述。

但是,两个类都必须位于同一<test>下。

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

<suite name="Suite" verbose="1" >
  <test name="Test" >
    <classes>
       <class name="c1" />
       <class name="c2" />
    </classes>
  </test>
</suite>

在运行测试套件时,以下内容将导致异常。

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

<suite name="Suite1" verbose="1" >
  <test name="Test1" >
    <classes>
       <class name="c1" />
    </classes>
  </test>

  <test name="Test2">
    <classes>
      <class name="c2" />
    </classes>
  </test>
</suite>

答案 3 :(得分:0)

两种解决方案: 1.使用dependsOnGroups和继承

host='login.spotify.com%0a'
  1. 使用编程:

        import static org.testng.Assert.fail;
        import org.testng.annotations.Test;
    
        public class PTest1 {
            @Test(groups = "A")
            public void test11() {
                System.out.println("test11");
                fail();
            }
        }
    
    
        import org.testng.annotations.Test;
        public class PTest2 extends PTest1 {
    
            @Test(groups = "B", dependsOnGroups = "A")
            public void test21() {
                System.out.println("test21");
            }
        }
    
    
        <suite name="priority" verbose="1">
            <groups>
                <run>
                    <include name ="B"/>
                </run>
            </groups>
            <test name="pri2">
                <classes>            
                    <class name="priority.PTest2"/>
                </classes>
            </test>
            <test name="pri1">
                <classes>            
                    <class name="priority.PTest1"/>
                </classes>
            </test>    
        </suite>