java - jUnit 模拟 ModelMapper
问题描述
我正在尝试制作一些 UnitTest 并且我有这样的方法;
public void processInitialBalances(RequestDTO requestDTO) {
logger.info("At processInitialBalances");
// Convert from DTO to Entity
Balance balance = modelMapper.map(requestDTO.getInitialBalances(), Balance.class);
balance.setId(DUMMY_ID);
Type listType = new TypeToken<List<Issuer>>() {}.getType();
List<Issuer> issuer = modelMapper.map(requestDTO.getInitialBalances().getIssuers(), listType, "issuer-list");
if (!issuer.isEmpty()) {
issuer.get(ibcConstants.ZERO).setId(DUMMY_ID);
balance.setIssuer(issuer);
// Save balance entity and childs (issuers)
balance = balanceRepository.save(balance);
logger.info("Leaving processInitialBalances");
}
我正在努力在 UnitTest 中通过这条线;
Balance balance = modelMapper.map(requestDTO.getInitialBalances(), Balance.class);
balance.setId(DUMMY_ID);
Type listType = new TypeToken<List<Issuer>>() {}.getType();
List<Issuer> issuer = modelMapper.map(requestDTO.getInitialBalances().getIssuers(), listType, "issuer-list");
因为当我运行 classUnderTest.processInitialBalances(dto); 我在 balance.setId(id); 行得到一个 NPE
我试图模拟modelMapper,但我得到了PotentiallyStubbingProblem,这是我的测试。
@Test
public void testBalanceCreated() throws ServiceException {
RequestDTO requestDTO = new RequestDTO();
BalanceDTO balanceDTO = new BalanceDTO();
List<IssuerDTO> issuers = new ArrayList<>();
IssuerDTO issuer = new IssuerDTO();
issuer.setIssuerName("GBM");
issuer.setSharePrice(10f);
issuer.setTotalShares(100);
issuers.add(issuer);
balanceDTO.setCash(100f);
balanceDTO.setIssuers(issuers);
requestDTO.setInitialBalances(balanceDTO);
when(modelMapper.map(null, null, null)).thenReturn(new Balance());
when(modelMapper.map(null, null)).thenReturn(new ArrayList<Issuer>());
cut.processInitialBalances(requestDTO);
// Assert entities and repository call.
}
任何建议将不胜感激。
解决方案
when(modelMapper.map(isNull(), isNull(), isNull())).thenReturn(new Balance());
when(modelMapper.map(isNull(), isNull())).thenReturn(new ArrayList<Issuer>());
推荐阅读
- java - 是否有使用 HttpUrlConnection 的 AsyncTask 的替代方案
- linux - 启用 Systemd 的服务不再在启动时启动
- perl - 如何使用perl获取一个字符的位置及其另一个出现并在文件中每一行的两个位置之间打印
- php - 是否对 PSR 兼容的控制结构使用替代 PHP 语法?(与 HTML 混合时)
- c - 如何从 gtk_container_get_children 获取按钮标签
- ionic4 - Ionic 4导航到模态内的另一个页面
- flutter - 根据父级大小按比例缩小小部件中的所有子级
- python - 使用马尔可夫链进行异常检测
- r - 基础 R 中绘图的小问题 - 绘图顶部显示不需要的线条
- python - python - 如何将不同级别的日志写入python日志模块中的单独文件?