1

前のテストの実行の成功に依存する testNG テストを作成しようとしています (たとえば、アカウントを作成して詳細を編集したいとします)。データプロバイダーと組み合わせたいです。これは論理的に思えたので、dependsOnMethods を使用することにしましたが、予想とは異なる動作をすることに気付きました。以下の例では、最初のデータ セットが合格条件を提供し、もう 1 つのデータ セットが不合格条件を提供するため、テスト「3」が 1 回スキップされ、1 回実行されることを期待しています。残念ながら、「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");


}

}
4

1 に答える 1

0

私もその動作を見ることができ、3 つが 1 回実行され、1 回スキップされることも期待していました。どちらの場合も、3 番目の方法はスキップされます。おそらく、バグを報告するか、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");
            }
于 2013-02-07T17:23:37.553 に答える