Что такое расширение Junit
Цель расширений Junit 5 - расширить поведение тестовых классов или методов
source
Продолжение чтения Модель расширения Junit 5 & @ExtendWith
аннотация: здесь
SpringExtension
SpringExtension интегрирует Spring TestContext Framework в модель программирования JUnit 5 Jupiter.
public class SpringExtension
extends Object
implements BeforeAllCallback, AfterAllCallback, TestInstancePostProcessor, BeforeEachCallback, AfterEachCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback, ParameterResolver{..}
MockitoExtension
Это расширение JUnit Jupiter эквивалент нашего JUnit4 MockitoJUnitRunner
public class MockitoExtension
extends java.lang.Object
implements BeforeEachCallback, AfterEachCallback, ParameterResolver{..}
Как видно, SpringExtension
реализует намного больше расширений, чем MockitoExtension
.
Также @SpringBootTest
мета-аннотируется с помощью @ExtendWith(SpringExtension.class)
, и это означает, что каждый раз, когда ваши тесты расширяются с помощью SpringExtension
. @MockBean
- это аннотация каркаса Spring, используемая вместе с @ExtendWith(SpringExtension.class)
Чтобы увидеть разницу, попробуйте следующее
ExtendWith
только MockitoExtension
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test will fail
}
}
ExtendWith
только SpringExtension
@ExtendWith(SpringExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
ExtendWith
с обоими SpringExtension
и MockitoExtension
@ExtendWith(MockitoExtension.class)
@ExtendWith(SpringExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
Оба работают в вашем случае, потому что @SpringBootTest
аннотации для тестового класса, как объяснено.
Чтобы ответить на вопрос: когда использовать @ExtendWith
Spring или Mockito? ,
Когда для теста требуется контекст Spring Test (для автоматической передачи компонента / использования @MockBean
) вместе с моделью программирования JUnit 5 Jupiter, используйте @ExtendWith(SpringExtension.class)
. Это будет поддерживать аннотации Mockito также через TestExecutionListeners.
Когда тест использует Mockito и нуждается в поддержке модели программирования Jupit 5 JUnit, используйте @ExtendWith(MockitoExtension.class)
Надеюсь, это поможет