java - 代码工作正常,因为 web 服务在 junit 中出现错误

标签 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 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;
}

}

我将相同的对象传递给 Web 服务和测试用例,但在 Web 服务调用中得到 null 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());
}
}

请帮助我知道出了什么问题。

最佳答案

您正在使用模拟对象,因此您需要对方法进行 stub 以说明调用它们时您想要获得的内容。默认情况下,未 stub 的方法通常返回 null。

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

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

查看文档:Mockito

关于java - 代码工作正常,因为 web 服务在 junit 中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45028719/

相关文章:

java - 根据请求的主机名在 JBoss 中配置多个 keystore

java - Spring @Transactional 类与方法优先规则

spring - 具有 Autowiring 功能的动态代理 Bean

oracle - 什么可能导致间歇性 ORA-12519 (TNS : no appropriate handler found) errors

java - 强化高 : Access specifier manipulation on reflection that is used to invoke a private constructor

java - 如何在 ant zip 任务中使用 exceptsfile/includesfile

java - 获取哈希集 key

java - Gradle junit编码问题

javascript - 在 javascript 中读取一个 spring Controller 模型

java - jUnit 4 中的 TestSuite 设置