无法测试服务逻辑中的方法

问题描述 投票:0回答:1

我想测试一下这个方法:

@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

java spring spring-boot unit-testing mockito
1个回答
0
投票

您需要模拟ModelMapper的map方法,使其返回一个非空对象,如下所示

Mockito.when(mockModelMapper.map(any(Genre.class))).thenReturn(new GenreResponse ());

© www.soinside.com 2019 - 2024. All rights reserved.