栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记录项目中一次单元测试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记录项目中一次单元测试

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

记录一次单元测试
  • 一、单元测试私有类方法
  • 二、使用步骤
    • 1.测试方法
    • 2.具体步骤
  • 总结

提示:以下是本篇文章正文内容,下面案例可供参考

一、单元测试私有类方法

这里记录一下单元测试私有类方法时应该注意的点

二、使用步骤 1.测试方法

代码如下(示例):

//todo AssertUtil.assertTrue会抛出异常,这里也没写怎么处理异常
    private List assembleFrequencyData(List formList, List batteryIdList) {
        List sendList = new ArrayList<>();
        Map mapping = bcaMapper.queryVinBidMapping(batteryIdList);
        for (FrequencyChanges frequencyChanges : formList) {
            AssertUtil.assertTrue(Objects.nonNull(frequencyChanges.getFrequency())
                    && StringUtils.hasText(frequencyChanges.getBatteryId())
                    && Objects.nonNull(frequencyChanges.getDuration()), ApplicationEnum.SDA_HAS_EMPTY_DATA);
            SdaFrequencyChangesForm sdaFrequencyChangesForm = new SdaFrequencyChangesForm();
            sdaFrequencyChangesForm.setFrequency(frequencyChanges.getFrequency());
            sdaFrequencyChangesForm.setBId(frequencyChanges.getBatteryId());
            sdaFrequencyChangesForm.setPeriod(String.valueOf(frequencyChanges.getDuration()));
            sdaFrequencyChangesForm.setVin(mapping.get(sdaFrequencyChangesForm.getBId()).getVin());
            sendList.add(sdaFrequencyChangesForm);
        }
        return sendList;
    }

注意,本文使用的代码中已经使用了@Mock和@InjectMocks模拟了相关类

2.具体步骤

测试私有类方法时无法直接调用,需要用到java反射机制,同时这里调用了Mapper层的方法,需要用到PowerMockito的when机制
代码如下(示例):

@Test
    public void assembleFrequencyDataTest() throws Exception {
        List frequencyChangeslist = new ArrayList();
        FrequencyChanges frequencyChanges = new FrequencyChanges();
        frequencyChanges.setFrequency(10);
        frequencyChanges.setBatteryId("BBA76DB39A58E1CF4823220CF2D5F113");
        frequencyChanges.setDuration(BigDecimal.valueOf(2.5));
        frequencyChangeslist.add(frequencyChanges);
        List batteryIdList = new ArrayList<>();;
        batteryIdList.add("BBA76DB39A58E1CF4823220CF2D5F113");
        Map mapping = new HashMap<>();
        VinBatteryIdMappingVO vinBatteryIdMappingVO = new VinBatteryIdMappingVO();
        vinBatteryIdMappingVO.setVin("LR6DACDG0LX200375");
        vinBatteryIdMappingVO.setBatteryId("BBA76DB39A58E1CF4823220CF2D5F113");
        mapping.put("BBA76DB39A58E1CF4823220CF2D5F113",vinBatteryIdMappingVO);
        PowerMockito.when(bcaMapper.queryVinBidMapping(anyList()))
                .thenReturn(mapping);
        Method assembleFrequencyData = bcaServiceImpl.getClass()
                .getDeclaredMethod("assembleFrequencyData",List.class,List.class);
        assembleFrequencyData.setAccessible(true);
        Object formlist = assembleFrequencyData.invoke(bcaServiceImpl,frequencyChangeslist,batteryIdList);
        Assert.assertNotNull(formlist);
        System.out.println(String.valueOf(formlist));

    }

总结

首先是要创建私有类的方法,需要使用类对象,方法名字符串,方法参数的类

Method assembleFrequencyData = bcaServiceImpl.getClass()
                .getDeclaredMethod("assembleFrequencyData",List.class,List.class);
assembleFrequencyData.setAccessible(true);

然后是mock一下调用的其他方法

PowerMockito.when(bcaMapper.queryVinBidMapping(anyList()))
                .thenReturn(mapping);

然后就可以运行得到测试结果了,只不过结果限定是object类型

Object formlist = assembleFrequencyData.invoke(bcaServiceImpl,frequencyChangeslist,batteryIdList);

当然,单元测试要考虑路径覆盖率,像本文方法中使用assert会抛出异常,
但是作者又不去catch这个异常,所有暂时没做其他分支的测试

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号