dependsOethMethods和dataprovider方法在其中一个数据集导致失败时未执行

时间:2013-02-07 16:57:28

标签: testng

我正在尝试创建一个testNG测试,该测试取决于成功执行上一个测试(假设我想创建一个帐户然后编辑一些细节)。我想将它与数据提供商结合起来。我决定使用dependsOnMethods,因为这似乎是合乎逻辑的,但我注意到它的行为与我期望的不同。在下面的示例中,我希望测试“三”被跳过一次并执行一次,因为第一组数据提供了通过条件而另一个提供了失败条件。不幸的是,我似乎错过了“dependsOnMethods”背后的一些概念。也许还有其他方法可以做到这一点? 谢谢你的帮助。

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



public class simpleTest {

@DataProvider(name = "provided data")
public static Object[][] data() throws Exception {
       Object[][] data = new Object[][] { 

               {true},
               {false}
               };


       return data;
}


@Test(dataProvider = "provided data")
public void one(boolean cond){
    System.out.println("******** 1");


}
@Test(dataProvider = "provided data")
public void thisfailssometimes(boolean cond){
    System.out.print("******** 2 !!!");
    if (cond) {System.out.println("PASS");}else{System.out.println("FAIL");};
    Assert.assertTrue(cond);


}

@Test(dataProvider = "provided data",dependsOnMethods = {"thisfailssometimes"})
public void three(boolean cond){
    System.out.println("******** 3");


}

}

1 个答案:

答案 0 :(得分:0)

我也可以看到这种行为,我原本预计会有三次运行并且也会跳过一次。在这两种情况下都跳过了第三种方法。您可以提交错误或等待Cedric回复该帖子。 作为一种解决方法,在工厂中尝试相同的流程会产生预期的行为。这是修改后的代码..

 @Factory(dataProvider="provided data")
    public simpleTests(boolean b){
        this.b = b; 
    }
    @DataProvider(name = "provided data")
    public static Object[][] data() throws Exception {
           Object[][] data = new Object[][] { 
                           {true},
                           {false}
                           };


                   return data;
        }

    @Test
    public void one(){
            System.out.println("******** 1");
    }
   @Test
   public void thisfailssometimes(){
       System.out.print("******** 2 !!!");
       if (b) {System.out.println("PASS");}else{System.out.println("FAIL");};
       Assert.assertTrue(b);

            }

   @Test(dependsOnMethods = {"thisfailssometimes"})
   public void three(){
        System.out.println("******** 3");
            }