Как выполнить beforeEach для всех моих файлов интеграционных тестов

#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
   
}