web-dev-qa-db-ja.com

基本クラスのTestNg @BeforeTestは、フィクスチャごとに1回だけ発生します

@BeforeTestを使用してコードを取得しようとしています...すべてのテストの前に1回実行します。

これは私のコードです:

public class TestBase {
    @BeforeTest
    public void before() {
        System.out.println("BeforeTest");
    }
}

public class TestClass extends TestBase{
    @Test
    public void test1(){}

    @Test
    public void test2(){}
}

「BeforeTest」は1回だけ印刷され、2回は印刷されません。何が悪いのですか?

30
ripper234

@BeforeTestではなく、@ BeforeMethodを使用してください。

@BeforeTestの意味は ドキュメント で説明されています。

45
Cedric Beust

「BeforeTest」は1回だけ印刷され、2回は印刷されません。何が悪いのですか?

***ごめんなさい。私はあなたが@BeforeTestと書かれていることに気づいていませんが、あなたの例では@BeforeTestは@BeforeClassとほぼ同じであり、テストクラスがもうないときは@BeforeClassを使う方が良いです。

@BeforeClass」は、テストメソッドと同じクラスで宣言する必要があります。

//Example

package test;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class Tests {
private String bClass;
private String bMethod1;
private String bMethod2;

@BeforeClass
public void beforeClass() {
    bClass = "BeforeClass was executed once for this class";
}

@BeforeMethod
public void beforeMetodTest1() {
    bMethod1 = "It's before method for test1";
}

@Test
public void test1() {
    System.out.println(bClass);
    System.out.println(bMethod1);
}

@BeforeMethod
public void beforeMethodTest2() {
    bMethod2 = "It's before method for test2";
}

@Test
public void test2() {
    System.out.println(bClass);
    System.out.println(bMethod2);
}
}

@BeforeClassは、このクラスのすべてのテストメソッドの前に1回実行されます。 @BeforeMethodはテストメソッドの前に実行され、その後に書き込まれます。

@BeforeClassは、@ BeforeMethodとは異なり、テストクラスに1つだけ存在する可能性があります(@BeforeClassの場合は、順番に実行されますが、テストの正しい構成ではありません)。

追伸私の英語でごめんなさい:)

3
Raman

documentation によると、@ BeforeTestで注釈されたメソッドは、タグ内のクラスに属する@Testメソッドが実行される前に実行されます。

私の経験から:

  • 各@BeforeTestメソッドは1回だけ実行されます
  • @BeforeTestメソッドが複数ある場合、それらの実行順序は、それらの@BeforeTestメソッドを含むクラスの順序によって異なります。

簡単な例を設定してこれをテストできます。

2
CuongHuyTo

@beforeTestを使用する場合、そのメソッドはすべての<test>の最初に1回実行されます(テストスーツのxmlファイルで指定します)テストにそのクラスが含まれている場合

すべての@befortests すべてのクラス内<test>内は、そのテストの開始時に実行されます

0