Очистка после всех тестов junit
В моем проекте мне нужно сделать некоторые настройки репозитория перед всеми тестами. Это делается с использованием некоторых сложных статических правил. Однако я не знаю, как очистить после всех тестов. Я не хочу, чтобы какое-то магическое статическое число ссылалось на количество всех методов тестирования, которые я должен поддерживать все время.
Самый ценный способ - добавить слушателя, который будет вызываться после всех тестов. Есть ли какой-либо интерфейс для него уже в JUnit4?
edit: это не имеет ничего общего с @BeforeClass и @AfterClass, поэтому я должен знать, вызван ли метод, аннотированный с помощью @AfterClass в последний раз.
Ответы
Ответ 1
Я использую JUnit 4.9. Будет ли это помогать?:
import junit.framework.TestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({First.class,Second.class,Third.class})
public class RunTestSuite extends TestCase {
@BeforeClass
public static void doYourOneTimeSetup() {
...
}
@AfterClass
public static void doYourOneTimeTeardown() {
...
}
}
Изменить: Я вполне уверен (если я не пойму вас на вопрос), что мое решение - это то, что вы ищете. то есть один метод разрыва после всех тестов. Нет слушателя, JUnit имеет это средство. Спасибо.
Ответ 2
Я рекомендую использовать org.junit.runner.notification.RunListener, например:
public class TestListener extends RunListener {
@Override
public void testRunStarted(Description description) throws Exception {
// Called before any tests have been run.
}
@Override
public void testRunFinished(Result result) throws Exception {
// Called when all tests have finished
}
}
Подробнее читайте в JUnit java doc.
Вы можете использовать это даже с плагином Maven surefire (unit tests) или отказоустойчивым плагином (интеграционные тесты), добавив следующий код в конфигурацию плагина:
<properties>
<property>
<name>listener</name>
<value>com.innovatrics.afismq.it.TestListener</value>
</property>
</properties>
Ответ 3
Вы всегда можете написать свой собственный TestRunner. Однако, прежде чем вы это сделаете, вам нужно будет оценить необходимость в том же. Лучше использовать @BeforeClass и @AfterClass. Другим примером, на который я могу указать, является способ, с помощью которого hibernate позволяет пользователям выполнять модульное тестирование с использованием "import.sql".
Ответ 4
Не нужно использовать набор, просто добавьте @BeforeClass и @AfterClass как статические
public class Tests {
@BeforeClass
public static void doYourOneTimeSetup()
{
...
}
@AfterClass
public static void doYourOneTimeTeardown() {
...
}
@Test
public void testYourTestcase()
{
...
}
}
Ответ 5
Просто столкнулся с той же проблемой.
Мое решение: