У меня есть следующий тест:
@SpringBootTest
@ExtendWith(SpringExtension.class)
class BookServiceImplTest {
@MockBean
private BookRepository bookRepository;
@MockBean
private LibraryService libraryService;
@Autowired
private BookServiceImpl bookService;
@Test
void create() {
BookRequestDTO bookRequestDTO = new BookRequestDTO();
Library library = new Library();
Book expectedBook = new Book();
when(libraryService.getById(bookRequestDTO.getLibraryId()))
.thenReturn(library);
when(bookRepository.save(any(Book.class)))
.thenReturn(expectedBook);
Book actualBook = bookService.create(bookRequestDTO);
assertEquals(expectedBook, actualBook);
}
}
Это нормально, и он работает, но мне было интересно, есть ли способ запустить его как модульный тест вместо интеграционных тестов и по-прежнему использовать @ MockBean @Autowired. Или я что-то упустил?
Я пытался оставить только @ExtendWith (SpringExtension.class), но я получил исключение о том, что компонент BookServiceImpl не найден.
Я знаю, как это сделать с помощью MockitoExtension и @Mock, @InjectMocks, но мне было интересно, есть ли более SpringBoot способ сделать это?