首页 > 解决方案 > 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.
    }

任何建议将不胜感激。

标签: javaunit-testingjunitmockitomodelmapper

解决方案


when(modelMapper.map(isNull(), isNull(), isNull())).thenReturn(new Balance());
when(modelMapper.map(isNull(), isNull())).thenReturn(new ArrayList<Issuer>());

推荐阅读