Junit перед классом (не статичный)

Есть ли любые лучшие практики для получения, Junit выполняют функцию однажды в тестовом файле, и это не должно также быть статично.

как @BeforeClass на не статическая функция?

Вот ужасное решение:

@Before void init(){
    if (init.get() == false){
        init.set(true);
        // do once block
    }
}

хорошо это - что-то, что я не хочу делать, и я ищу интегрированное junit решение.

78
задан Roman 13 May 2010 в 09:22
поделиться

3 ответа

Если вы не хотите настраивать статические инициализаторы для однократной инициализации и не особо разбираетесь в использовании JUnit, взгляните на TestNG. TestNG поддерживает нестатическую одноразовую инициализацию с различными параметрами конфигурации, все с использованием аннотаций.

В TestNG это будет эквивалентно:

@org.testng.annotations.BeforeClass
public void setUpOnce() {
   // One time initialization.
}

Для разборки,

@org.testng.annotations.AfterClass
public void tearDownOnce() {
   // One time tear down.
}

Для TestNG, эквивалента JUnit 4 @Before и @After , вы можете использовать @BeforeMethod и @AfterMethod соответственно.

18
ответ дан 24 November 2019 в 10:39
поделиться

Я никогда не пробовал, но, может быть, вы можете создать конструктор без аргументов и вызывать оттуда свою функцию?

0
ответ дан 24 November 2019 в 10:39
поделиться

Самым простым решением является использование пустого конструктора. Вы все еще можете переопределить конструктор в расширенном классе.

Но это не оптимально со всем наследованием. Вот почему JUnit 4 вместо этого использует аннотации.

Другой вариант - создать вспомогательный метод в классе factory / util и позволить этому методу выполнять всю работу.

Если вы используете Spring, вам следует рассмотреть возможность использования аннотации @TestExecutionListeners . Что-то вроде этого теста:

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({CustomTestExecutionListener.class, 
     DependencyInjectionTestExecutionListener.class})
@ContextConfiguration("test-config.xml")
public class DemoTest {

Spring AbstractTestExecutionListener содержит, например, это пустой метод, который можно переопределить:

public void beforeTestClass(TestContext testContext) throws Exception {
    /* no-op */
}

ПРИМЕЧАНИЕ: НЕ пропускайте / пропускайте DependencyInjectionTestExecutionListener при добавлении пользовательских TestExecutionListeners . Если вы это сделаете, все автоматы будут нулевыми .

35
ответ дан 24 November 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: