TestNg @BeforeTest для базового класса происходит только один раз для каждого прибора - PullRequest
30 голосов
/ 30 ноября 2010

Я пытаюсь использовать @BeforeTest, чтобы код ... запускался один раз перед каждым тестом.

Это мой код:

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" печатается толькоодин раз, а не дважды.Что я делаю не так?

Ответы [ 3 ]

44 голосов
/ 30 ноября 2010

Используйте @BeforeMethod, а не @ BeforeTest.

Значение @BeforeTest объясняется в документации .

3 голосов
/ 18 января 2012

«BeforeTest» печатается только один раз, а не дважды. Что я делаю не так?

*** К сожалению. Я не заметил, что вы написали @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 будет выполнен один раз, перед всеми вашими методами тестирования в этом классе. @BeforeMethod будет выполнен перед тестовым методом, перед которым он написан.

@ BeforeClass может быть только один в тестовом классе, в отличии от @BeforeMethod! (Если это некоторый @BeforeClass, они выполняются по очереди, но это не корректная композиция теста)

P.S. Извините за мой английский:)

2 голосов
/ 29 января 2015

Согласно документации , метод с аннотацией @BeforeTest запускается до запуска любого метода @Test, принадлежащего классам внутри тега.

Из моего опыта:

  • Каждый метод @BeforeTest запускается только один раз
  • Если у вас есть несколько методов @BeforeTest, порядок их выполнения зависит от порядка класса, содержащего эти методы @BeforeTest.

Вы можете проверить это, настроив простой пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...