我想测试一下这个方法:
@Override
public GenreResponse fetchGenreById(Long genreId) {
return convertGenreToGenreResponse(findGenreEntityByGenreId(genreId));
}
private GenreResponse convertGenreToGenreResponse(Genre genre) {
return modelMapper.map(genre, GenreResponse.class);
}
private Genre findGenreEntityByGenreId(long genreId) {
return genreRepository.findByGenreId(genreId)
.orElseThrow(() -> new ObjectNotFoundException("Genre with " + genreId + " id not found!"));
}
我为这个方法写了一个测试,但它不起作用,我也不明白为什么。 这是我的测试:
@ExtendWith(MockitoExtension.class)
class GenreCrudServiceTest {
@Mock
private ModelMapper mockModelMapper;
@Mock
private GenreRepository mockGenreRepository;
private GenreCrudService genreCrudService;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
genreCrudService = new GenreCrudServiceImpl(mockModelMapper, mockGenreRepository);
}
@Test
public void GenreCrudService_FetchGenreById_ReturnsGenreResponse() {
// Arrange
long genreId = 1;
Genre genre = Genre.builder()
.genreId(genreId)
.title("testTitle")
.build();
Mockito.when(mockGenreRepository.findByGenreId(any(Long.class))).thenReturn(Optional.of(genre));
// Act
GenreResponse genreResponse = genreCrudService.fetchGenreById(genreId);
// Assert
Assertions.assertThat(genreResponse).isNotNull();
}
但是我的测试不起作用,它给了我一个错误:
Expecting actual not to be null
java.lang.AssertionError:
Expecting actual not to be null
错误发生在这一行:
Assertions.assertThat(genreResponse).isNotNull();
我不明白为什么我会返回 null,因为我在这里定义了:
Mockito.when(mockGenreRepository.findByGenreId(any(Long.class))).thenReturn(Optional.of(genre));
当通过 id 搜索流派时,将返回特定流派,进一步的方法应将其转换为 GenreResponse
您需要模拟ModelMapper的map方法,使其返回一个非空对象,如下所示
Mockito.when(mockModelMapper.map(any(Genre.class))).thenReturn(new GenreResponse ());