猿问

如何使用 Mockito 为 page.map(mapper::toDto) 模拟

我正在junit为我的方法编写一个测试用例service,它有一个外部调用jpa repository,我想这样做mock。

此方法findall(Pageable pageable)返回page由映射器映射的实体Mapstruct's。但是,NPE当我assert返回时,我得到了一个。可能有一些我遗漏的东西,我不确定如何mock调用这个方法。


我试过像这样编写测试用例测试用例:


public class myTestclass {

@Test

public void testFindAllUser() {

User user1 = new User();

user1.setId(Long.valueOf(1));

User user2 = new User();

user2.setId(Long.valueOf(2));

List<User> userList = new ArrayList<>();

userList.add(user1);

userList.add(asset2);


Pageable pageable = PageRequest.of(0, 5);

Page<User> userPage = new PageImpl<>(userList, pageable, userList.size());

Page<UserDto> userDtoPage = null;

Mockito.when(userRepositoryMock.findAll(pageable)).thenReturn(userPage);

Mockito.when(userPage.map(userMapperMock::toDto)).thenReturn(userDtoPage);// expecting to mock this object in

// some other way.

assertThat(userService.findAll(pageable)).isEqualTo(userDtoPage); // throws NPE

}

}

我正在为其编写测试用例的方法:


public Page<UserDto> findAll(Pageable pageable) 

{


return userRepository.findAll(pageable).map(userMapper::toDto);

}

这是我的映射器类:


@Mapper(componentModel = "spring", uses = { FarmerMapper.class })


public interface UserMapper extends EntityMapper<UserDto, User> {


UserDto toDto(User user);


User toEntity(UserDto userDto);

}

mapper模拟该方法toDto以使其返回页面的正确方法是什么userDto?


慕侠2389804
浏览 157回答 1
1回答

喵喔喔

由于.map使用UserMapper's toDto方法来转换页面的每个元素,我模拟了多个元素userMapper来解决这个问题。因此,我创建了 2 个页面,一个User用于UserDto. 所以我的测试用例被修改为@Testpublic void testFindAllUser() {User user1 = new User();user1.setId(DEFAULT_ID);User user2 = new User();user2.setId(2L);List<User> userList = new ArrayList<>();userList.add(user1);userList.add(user2);Pageable pageable = PageRequest.of(0, 5);Page<User> userPage = new PageImpl<>(userList, pageable, userList.size());UserDto userDto1 = new UserDto();userDto1.setId(Long.valueOf(1));UserDto userDto2 = new UserDto();userDto2.setId(Long.valueOf(2));List<UserDto> userDtoList = new ArrayList<>();userDtoList.add(userDto1);userDtoList.add(userDto2);Page<UserDto> userDtoPage = new PageImpl<>(userDtoList, pageable, userDtoList.size());Mockito.when(userMapperMock.toDto(user1)).thenReturn(userDto1);Mockito.when(userMapperMock.toDto(user2)).thenReturn(userDto2); //Mocking the toDto method.&nbsp;Mockito.when(userRepositoryMock.findAll(pageable)).thenReturn(userPage);assertThat(userService.findAll(pageable)).isEqualTo(userDtoPage);}现在,如果有更多的元素要添加到页面,我会对toDto所有元素进行相同的模拟。
随时随地看视频慕课网APP

相关分类

Java
我要回答