Java 当webservice在junit中出现错误时,代码工作正常

Java 当webservice在junit中出现错误时,代码工作正常,java,spring,junit,junit4,Java,Spring,Junit,Junit4,我写了一篇文章作为 @Service public class ConverterService { private static final Logger LOGGER = LoggerFactory.getLogger(ConverterService.class); private static final String CONVERT_DTO_TO_ENTITY= "convertToEntity called with DTO: "; @Autowired private Mod

我写了一篇文章作为

@Service
public class ConverterService {

private static final Logger LOGGER = LoggerFactory.getLogger(ConverterService.class);

private static final String CONVERT_DTO_TO_ENTITY= "convertToEntity called with DTO: ";

@Autowired
private ModelMapper modelMapper;

/**
 * @param userActivityHistoryDto : user activity history object
 * @return - Returns UserActivityLog object
 * @throws JsonProcessingException - Exception raised
 */
public UserActivityLog convertToEntity(UserActivityHistoryDto userActivityHistoryDto) throws JsonProcessingException {
    LOGGER.debug(CONVERT_DTO_TO_ENTITY + userActivityHistoryDto);
    final UserActivityLog userActivityLog = modelMapper.map(userActivityHistoryDto, UserActivityLog.class); //getting null in junit
    ObjectMapper mapper = new ObjectMapper();
    ActivityDescriptionDto obj = userActivityHistoryDto.getActivityDescription();

    //Object to JSON in String
    String jsonInString = mapper.writeValueAsString(obj);
    userActivityLog.setActivityDescription(jsonInString);
    return userActivityLog;
}
}

我将同一个对象传递给webservice和测试用例,但在webservice调用中得到空junit和同一个对象的完美映射。测试用例看起来像

@RunWith(MockitoJUnitRunner.class)
public class ConverterServiceTest {

@InjectMocks
private ConverterService converterService;

@Mock
private ModelMapper modelMapper;

@Test
public void testConvertEntity() throws JsonParseException, JsonMappingException, IOException{
    ObjectMapper mapper = new ObjectMapper();
    UserActivityHistoryDto userActivityHistoryDto = mapper.readValue(Resources.getResource("CreateUserHistoryLog.json"), UserActivityHistoryDto.class);

    UserActivityLog userActivityLog = converterService.convertToEntity(userActivityHistoryDto);
    Assert.assertEquals("UPD_COMPY",userActivityLog.getActivityTypeCode().getActivityTypeCode());
    Assert.assertEquals("CID",userActivityLog.getKeyId());
    Assert.assertEquals("202020",userActivityLog.getKeyValueText());
    Assert.assertEquals("I",userActivityLog.getAudienceTypeCode());
    Assert.assertNotNull(userActivityLog.getActivityDescription());
}
}

请帮助我了解出了什么问题。

您使用的是一个模拟对象,因此需要存根方法来说明调用它们时希望得到什么。默认情况下,未创建子对象的方法通常返回null

当您调用modelMapper的方法映射时,在测试中,您需要以下内容:

when( modelMapper.map( anyObject( ), eq(UserActivityHistoryDto.class) ) ).thenReturn( /**What you want to return**/ new userActivityHistoryDto () );

请参阅文档:

向我们展示堆栈跟踪。您已将ModelMapper声明为模拟。您是否定义了modelMapper.map(…)应该返回什么?