TestNG: определение следующих методов испытаний - PullRequest
2 голосов
/ 18 января 2011

Моя цель - очистить () мой javax.persistence.EntityManager после каждого метода тестирования.

Вот пример тестового класса:

public class Example
{
    @Test(dataProvider = "sampleDataProvider")
    public void testA(String parameter)
    {
        System.out.println(parameter);
    }

    @Test(dataProvider = "sampleDataProvider")
    public void testB(String parameter)
    {
        System.out.println(parameter);
    }
}

EntityManager используется в dataProvider «sampleDataProvider», запрашивая БД для тестовых данных, которые затем компилируются в этом формате: new Object[2][1].Помните, что все запросы и компиляция данных выполняются до того, как тестовый метод (аннотированный @DataProvider) будет фактически запущен, и что мы фактически запрашиваем сущности, а не только строки.

Приведенный выше тестовый классбудет выглядеть так:

testA("some queried entity 1")
testA("some queried entity 2")
testB("some queried entity 1")
testB("some queried entity 2")

Моим первоначальным решением было использование аннотации @AfterTest для очистки entityManager.Однако он отсоединит "some queried entity 2" от entityManager перед вторым запуском (или вторыми тестовыми экземплярами) testA и testB, что вызовет проблемы при операциях чтения / записи для членов "some queried entity 2".

Моя цель - очистить entityManager после метода тестирования , и не обязательно после каждого экземпляра метода тестирования.

Позволяет ли TestNG узнать, какой тест будет запущен следующим?Таким образом, я мог бы легко очистить entityManager, если следующий тест будет новым.

Любые другие рекомендации?

1 Ответ

0 голосов
/ 18 января 2011

Я не знаю ни одного простого способа получить следующий метод испытаний. Кстати, вы можете достичь того же результата, используя аннотацию @AfterGroups:

@Test(groups = {"groupA"})
public void testA(...) { ... }

@Test(groups = {"groupB"})
public void testB(...) { ... }

@AfterGroups(groups = {"groupA"})
public void afterGroupA() {
    // clear entity manager here
}

Обратите внимание, что порядок запуска тестов не гарантируется TestNG до тех пор, пока вы не укажете его явным образом с помощью параметра depenOnMethods или depenno_nGroups аннотации @Test или атрибута «preserve-order» тега в файле testng.xml.

UPDATE

В качестве альтернативы вы можете использовать свой собственный TestListiner . Вы можете реализовать метод onTestStart () , который будет выполнять очистку, если это необходимо. AFAIU, вызванный метод тестирования доступен в частично заполненном ITestResult. Кстати, будьте осторожны - это может привести к проблемам, вызванным неявной логикой теста (очистка не будет видна из кода теста).

...