为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2023-06-04 17:51:59
我正在junit为我的方法编写一个测试用例service,它有一个外部调用jpa repository,我想这样做mock。此方法findall(Pageable pageable)返回page由映射器映射的实体Mapstruct's。但是,NPE当我assert返回时,我得到了一个。可能有一些我遗漏的东西,我不确定如何mock调用这个方法。我试过像这样编写测试用例测试用例:public class myTestclass {@Testpublic 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?
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

由于.map使用UserMapper's toDto方法来转换页面的每个元素,我模拟了多个元素userMapper来解决这个问题。


因此,我创建了 2 个页面,一个User用于UserDto. 所以我的测试用例被修改为


@Test

public 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. 


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

assertThat(userService.findAll(pageable)).isEqualTo(userDtoPage);

}

现在,如果有更多的元素要添加到页面,我会对toDto所有元素进行相同的模拟。


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信