В этой версии @MockBean и @SpyBean устарели и заменены на @ MockitoBean и @MockitoSpyBean
Я внес изменения в свой класс, аннотированные @TestConfiguration, и с тех пор мои SpringBootTests не работает на этапе инициализации.
Вот как выглядит мой класс конфигурации:
@TestConfiguration
public class IntegrationTestConfig {
@MockitoSpyBean
private LanguageRepository languageRepository;
@PostConstruct
void setUp() {
when(languageRepository.findAllCodes()).thenReturn(List.of("fr", "en"));
}
}
Эта конфигурация включается с помощью специальной метааннотации, например:
@Retention(RetentionPolicy.RUNTIME)
@SpringBootTest(classes = {IntegrationTestConfig.class, SpringSecurityTestConfig.class})
@ActiveProfiles("test")
@Sql(scripts = "classpath:sql/clearTables.sql", executionPhase = ExecutionPhase.AFTER_TEST_METHOD)
@AutoConfigureMockMvc
public @interface IntegrationTest {
}
После внесения этого изменения во время выполнения @PostConstruct я столкнулся со следующей ошибкой:
java.lang.NullPointerException: Cannot invoke "package.whatever.LanguageRepository.findAllCodes()" because "this.languageRepository" is null
Ошибка не возникнет, если я вернусь к устаревшему API (@SpyBean). Со старыми аннотациями все работает нормально.
Мои вопросы:
- Что я такое здесь отсутствует?
- Как я могу восстановить то же поведение, что и раньше, желательно, не полагаясь на наследование базового тестового класса с помощью настройки @BeforeEach?
Этот @SpyBean используется для имитации чего-то, что происходит только при запуске приложения, когда выполняется внешний вызов WS.
@Bean
ApplicationRunner fetchTranslations(LocalazyService translationService) {
log.info("Initializing translations...");
return ignored -> translationService.updateTranslationsWithCdn();
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ostconstru