Код: Выделить всё
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class ManagementService {
@Autowired
private Temp temp;
@EventListener(ApplicationReadyEvent.class)
public void startup() {
log.info("Startup on application ready.");
temp.print();
}
}
@Slf4j
@Component
public class Temp {
public void print() {
log.info("Inside temp");
}
}
Код: Выделить всё
@SpringBootTest
public abstract class SpringIntegrationBaseTest {
@SpyBean
protected ManagementService service;
@SpyBean
protected Temp temp;
@BeforeEach
public void preventConnection() throws SQLException {
Mockito.doNothing().when(temp).print();
}
}
Код: Выделить всё
2024-10-23 10:24:16.675 INFO 23628 [ main] o.a.c.l.i.Jdk14Logger : Started ManagementServiceTests in 3.382 seconds (process running for 4.907)
2024-10-23 10:24:16.694 INFO 23628 [ main] c.c.s.ManagementService : Startup on application ready.
2024-10-23 10:24:16.696 INFO 23628 [ main] c.c.s.Temp : Inside temp
Код: Выделить всё
2024-10-23 10:36:36.799 INFO 17496 [ main] o.a.c.l.i.Jdk14Logger : Started RestControllerTest in 0.821 seconds (process running for 5.924)
2024-10-23 10:36:36.801 INFO 17496 [ main] c.c.s.ManagementService : Startup on application ready.
Я думаю, это будет выглядеть примерно так:
инициализация контекста приложения --> вызов прослушивателя событий --> заглушка BeforeEach --> тест
Мне хотелось бы что-то вроде этого:
??? --> заглушка --> ??? --> Вызов прослушивателя событий --> ??? --> Тест
где ??? это любой промежуточный шаг
Я обнаружил, что могу использовать @MockBean, чтобы просто издеваться над Temp и ничего не делать для всех методов по умолчанию, однако во время тестирования мне нужно использовать фактическое поведение некоторых методов именно поэтому я хотел бы использовать @SpyBean, чтобы не заглушать все методы, используемые при тестировании.
Подробнее здесь: https://stackoverflow.com/questions/791 ... readyevent
Мобильная версия