zoukankan      html  css  js  c++  java
  • 使用Cobertura做代码覆盖率测试

    经验总结:首先要把cobertura.jar包含ant的classpath路径中,其次要求它包含在测试用例的classpath中;

    使用cobertura做代码覆盖率测试中出现的问题:覆盖率始终为0,不论是否有可用的测试用例都如此;

    解决问题的历程:

    第一步:在被测工程中增加了一个很简单的方法,在测试工程中增加了一个对前述方法的测试,发现覆盖度仍为0,由此确定是使用cobertura的方法有问题,而不是测试用例覆盖度确实为0;

    第二步:分离了cobertura中进行junit测试报告(以下简称为cob-junit)与cobertura测试报告(之前是放在一个文件夹里,难以区分哪些是junit的报告,哪些是cobertura的报告,后来放在了两个不同的文件夹中);

    第三步:分离后发现:cob-junit的测试报告与纯junit测试报告显示的测试数不同,纯junit的测试用例数正确,cob-junit测试用例数总为1,且运行错误(error),说明测试用例未能启动;检查错误原因:提示“java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/HasBeenInstrumented”;

    第四步:尝试解决上述错误。google后发现引起这个错误的原因是没有把cobertura.jar包含在测试用例的classpath中,也就是测试工程的ivy.xml文件的依赖条目里没有cobertura的jar包,将它加入到ivy.xml的依赖条目中后,解决了覆盖度始终为0的问题;

    经验总结:

    1. 对于自己不熟悉的技术,不要走捷径,如把cob-junit与cobertura测试报告放在一个文件夹里;

    2. 出错后要仔细阅读错误报告,寻找能够代表这个错误的关键词句,如“java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/HasBeenInstrumented”;

    3. 如果通过错误报告自己不能解决,使用搜索引擎查找前一步中的关键词句,寻找解决问题的可能经验;

    4. 如果暂时找不到能解决问题的经验,则按照软件(这里是cobertura)的Tutorial(一般来自官网)构建一个最简单的原型,并使其正常工作,然后不断向自己的问题靠拢,在不断修改原型的过程中对可能出错的方面进行筛选,最终锁定出错的位置;

    实践中面对一些古怪的错误,往往要重复、交叉进行很多次第3步和第4步,才能最终解决问题。

  • 相关阅读:
    jenkins
    Nexus5安装PostmarketOS(Alpine Linux)并装上Docker
    Abp Abp.AspNetZeroCore 2.0.0 2.1.1 Path
    音速启动 Vstart 5.7 win10手动移除后台设置主页
    Win10 20h2 19041 任务管理器 性能 蓝屏
    PostMan 在请求中自动添加Header
    LINQPad_6.9.15_Premium
    Byd 字段清单 通过JS端点导入
    SAP B1 修改数据库中b1版本号
    event是啥
  • 原文地址:https://www.cnblogs.com/darkmatter/p/3606825.html
Copyright © 2011-2022 走看看