![](/img/trans.png)
[英]How to test Service class methods which uses Mapstruct mappers in Springboot?
[英]MapStruct not working in service class while running Test cases
我正在創建測試用例,在我的服務類方法之一中,我使用mapStruct
將實體映射到 dto 類。
這是我的映射器類
@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();
}
}
}
當我運行我的測試用例時,我能夠在實體類中看到這兩條記錄,但是當這條線執行時
List<UserDto> userDto = userMapper.toUserDto(lst);
它給了我空白數組。
注意 - 在我的實體類中,我有很多字段,但從測試類中我只傳遞了 3 個參數。
您已經使用 @Mock 注釋對您的 UserMapper 進行了注釋,而沒有為此模擬編寫模擬配置。 然后是空白數組。 刪除 @Mock 注釋,或指定模擬應返回的內容。
例如 :
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTest {
@Mock
private UserRepository userRepo;
@Spy
private UserMapper userMapper = Mappers.getMapper(UserMapper.class);
@InjectMocks
private UserServiceImpl userServiceImpl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.