Лучший способ запустить только метод @BeforeClass

У меня есть тестовый класс, в котором есть метод @BeforeClass и метод @Test. Я запускаю тесты с помощью Ant. Я хотел бы знать, как лучше всего запускать только метод @BeforeClass, а не метод @Test. Вот базовая структура кода:

@BeforeClass
public void init() throws Exception {
    /* Perform test initialization */
}

@Test
public void randomTest() throws Exception {
    /* Run the test */
}

Я попытался сделать метод @Test частью группы, а затем в Ant указать свойство «excludedgroups», чтобы исключить эту группу. Я также попытался отключить метод @Test. Ни один из этих методов не работал, потому что он не запускал ни метод @Test, ни метод @BeforeClass.

Один обходной путь, который у меня есть, — создать пустой метод @Test, а затем использовать любой из указанных выше методов, но это не похоже на элегантное решение.

Есть ли лучший способ запустить только метод @BeforeClass?

Редактировать:

Вот как я указываю задачу в файле build.xml:

<testng classpathref="test.classpath"
        outputdir="${reports}"
        haltonfailure="false"
        failureProperty="tests.failed"
        useDefaultListeners="true"                   listeners="org.uncommons.reportng.HTMLReporter,org.uncommons.reportng.JUnitXMLReporter"
        parallel="classes"
        suitename="Tests"
        testname="${test.name} Tests">

person Thomas    schedule 19.01.2012    source источник


Ответы (3)


Отключение метода @Test будет работать, но у вас должен быть хотя бы один тестовый метод в вашем классе, иначе TestNG ничего не запустит в нем, так что, может быть, добавить пустой тестовый метод? Это довольно странный сценарий запуска класса только для его метода конфигурации, вы уверены, что эту конфигурацию нельзя поместить в другой класс?

person Cedric Beust    schedule 19.01.2012
comment
В этом случае инициализация теста занимает много времени, поэтому было бы хорошо иметь возможность просто инициализировать тест, а затем вручную пройти этапы теста, чтобы воспроизвести ошибку. - person Thomas; 20.01.2012

Если вы измените его на @BeforeSuite, он запустится без использования пустого метода @Test и исключения метода. Вы также можете отключить метод тестирования напрямую с помощью @Test(enabled=false).

person Tarken    schedule 20.01.2012
comment
Если я заменю \@BeforeClass на \@BeforeSuite, а затем запущу несколько тестов параллельно, то запустится только один из них. - person Thomas; 20.01.2012
comment
Я отредактировал вопрос, чтобы показать, что у меня есть в моем файле build.xml, если это прояснит ситуацию. - person Thomas; 20.01.2012
comment
Вы также можете использовать @BeforeTest. Я запускаю свой тест не напрямую через ant, а с помощью suite.xml, выполняемого ant. Выглядит примерно так <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1" verbose="1" > <test name="Nopackage" > <classes> <class name="NoPackageTest" /> </classes> </test> <test name="Regression1"> <classes> <class name="test.sample.ParameterSample"/> <class name="test.sample.ParameterTest"/> </classes> </test> </suite> из [link]testng.org/doc/documentation-main.html - person Tarken; 21.01.2012
comment
Если вы используете suite.xml, вы также можете исключить методы напрямую, но я не знаю, запускается ли тогда метод @beforeClass и можете ли вы сделать это с помощью ant - person Tarken; 21.01.2012

В конце концов я решил просто поместить оператор if вокруг каждого метода @Test и сделать так, чтобы оператор оценивал свойство System.

person Thomas    schedule 26.01.2012