我正在创建测试用例,在我的一个服务类方法中我正在使用mapStruct
将实体Map到dto类中。
这是我的Map器类
@Mapper(componentModel = "spring")
public interface UserMapper {
List<UserDto> toUserDto(List<UserEntity> users);
}
下面是我如何注入我的服务类
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
private final UserMapper userMapper;
这是我使用它的方式
List<UserDto> userDto = userMapper.toUserDto(lst);
这就是我在测试课上的做法
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTest {
@Mock
private UserRepository userRepo;
@Mock
private UserMapper userMapper;
@InjectMocks
private UserServiceImpl userServiceImpl;
@Test
public void contextLoads() {
then(controller).isNotNull();
then(userServiceImpl).isNotNull();
}
@Test
public void getAllUser() {
List<UserEntity> lst = new ArrayList<UserEntity>();
UserEntity userOne = new UserEntity();
userOne.setEmpFullname("Test Test1");
userOne.setUserId("marina");
userOne.setFlag("Y");
UserEntity usertwo = new UserEntity();
usertwo.setEmpFullname("Test Test2");
usertwo.setUserId("test");
usertwo.setFlag("Y");
lst.add(userOne);
lst.add(usertwo);
when(userRepo.findByStatus("W")).thenReturn(lst);
try {
List<UserDto> pendingUsersList = userServiceImpl.getPendingUser();
assertEquals(2, pendingUsersList.size());
} catch (GeneralException e) {
e.printStackTrace();
}
}
}
当我运行我的测试用例时,我能够在实体类中看到这2条记录,但是当执行这一行时List<UserDto> userDto = userMapper.toUserDto(lst);
它会给我一个空数组。
注意-在我的实体类中,我有很多字段,但从测试类中,我只传递了3个参数。
1条答案
按热度按时间gwo2fgha1#
您已使用@Mock注解注解您的UserMapper,但未写入此mock的mockito设定。则必须是空白数组。请移除@Mock注解,或指定mock应传回的内容。
例如: