1. Обзор
JUnit 5 предоставляет несколько методов регистрации расширений. Обзор некоторых из этих методов см. в нашем Руководстве по расширениям JUnit 5 .
В этом кратком руководстве мы сосредоточимся на программной регистрации расширений JUnit 5 с использованием аннотации @RegisterExtension
.
2. @RegisterExtension
Мы можем применить эту аннотацию к полям в тестовых классах. Одним из преимуществ этого метода является то, что мы можем напрямую обращаться к расширению как к объекту в тестовом контенте.
JUnit будет вызывать методы расширения на соответствующих этапах.
Например, если расширение реализует BeforeEachCallback,
JUnit вызовет соответствующие методы интерфейса перед выполнением тестового метода.
3. Использование @RegisterExtension
со статическими полями
При использовании со статическими полями JUnit будет применять методы этого расширения после применения расширений на основе @ExtendWith
на уровне класса .
Кроме того, JUnit будет вызывать обратные вызовы расширения как на уровне класса, так и на уровне метода.
Например, в следующем расширении представлены реализации как beforeAll
, так и beforeEach
:
public class LoggingExtension implements
BeforeAllCallback, BeforeEachCallback {
// logger, constructor etc
@Override
public void beforeAll(ExtensionContext extensionContext)
throws Exception {
logger.info("Type {} In beforeAll : {}",
type, extensionContext.getDisplayName());
}
@Override
public void beforeEach(ExtensionContext extensionContext) throws Exception {
logger.info("Type {} In beforeEach : {}",
type, extensionContext.getDisplayName());
}
public String getType() {
return type;
}
}
Давайте применим это расширение к статическому полю теста:
public class RegisterExtensionTest {
@RegisterExtension
static LoggingExtension staticExtension = new LoggingExtension("static version");
@Test
public void demoTest() {
// assertions
}
}
В выходных данных отображаются сообщения как от методов beforeAll
, так и от методов beforeEach
:
Type static version In beforeAll : RegisterExtensionTest
Type static version In beforeEach : demoTest()
4. Использование @RegisterExtension
с полями экземпляра
Если мы используем RegisterExtension
с нестатическими полями, JUnit применит расширение только после обработки всех обратных вызовов TestInstancePostProcessor
.
В этом случае JUnit будет игнорировать обратные вызовы уровня класса, такие как beforeAll
.
В приведенном выше примере давайте удалим модификатор static
из LoggingExtension
:
@RegisterExtension
LoggingExtension instanceLevelExtension = new LoggingExtension("instance version");
Теперь JUnit будет вызывать только метод beforeEach
, как показано в выводе:
Type instance version In beforeEach : demoTest()
5. Вывод
В этой статье мы сделали обзор программной регистрации расширений JUnit 5 с помощью @RegisterExtension
.
Мы также рассмотрели разницу между применением расширения к статическим полям и полям экземпляра.
Как обычно, примеры кода можно найти в нашем репозитории на Github .