簡體   English   中英

MapStruct 在運行測試用例時無法在服務類中工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM