#java #spring #spring-boot #junit #integration-testing
#java #весна #весенняя загрузка #junit #интеграция-тестирование
Вопрос:
У меня есть немного кода, который я хотел бы запустить в каждом @beforeEach из всех моих файлов интеграционных тестов. В основном код, который мне нужно добавить, следующий :
@MockBean
RequestInterceptor interceptor; // I NEED THIS
@BeforeEach
public void initTest() throws Exception {
Mockito.when(interceptor.preHandle(any(), any(), any())).thenReturn(true); // AND THIS
}
Есть ли способ избежать дублирования этой части в каждом файле? Возможно, я смогу создать файл конфигурации теста и использовать аннотацию в своих тестовых файлах. Поскольку я новичок в Java Spring boot, я был бы признателен за некоторую помощь. Спасибо.
Комментарии:
1. ну, вы можете создать родительский базовый класс, который будет иметь метод beforeEach, а затем просто наследовать этот класс для всех остальных, если я правильно понял ваш вопрос…
2. Вы также можете использовать расширения для JUnit5 или бегуны для Junit <5 Руководство по JUnit 5
Ответ №1:
Вы можете создать суперкласс, например, BaseTest и переместить этот код туда. И затем каждый ваш тест должен просто расширять BaseTest. Более того, вы можете установить все аннотации в этом классе. Например.:
@AutoConfigureMockMvc
@MockitoSettings(strictness = Strictness.STRICT_STUBS)
@ExtendWith(MockitoExtension.class)
@ExtendWith(SpringExtension.class)
@ActiveProfiles("test")
@SpringBootTest
public class BaseTest {
@MockBean
RequestInterceptor interceptor; // I NEED THIS
@BeforeEach
public void initTest() throws Exception {
Mockito.when(interceptor.preHandle(any(), any(), any())).thenReturn(true); // AND THIS
}
}
И затем все ваши тесты:
class MeasurementsServiceTest extends BaseTest {
//test methods here
}
Комментарии:
1. Мне пришлось переименовать
initTest
метод, потому что в противном случае он был бы переопределен initTest, присутствующим в тестовых файлах, но в остальном он работает нормально, спасибо!
Ответ №2:
Ну, вы можете создать родительский базовый класс, который будет иметь метод beforeEach, а затем просто наследовать этот класс для всех остальных
public class BaseTestClass {
@BeforeEach
public void setUp(){
System.out.println("Base Test Class");
}
}
public class InheritsFromBase extends BaseTestClass {
// here goes test code
}