如何有效保证Java代码单元测试覆盖率

这篇具有很好参考价值的文章主要介绍了如何有效保证Java代码单元测试覆盖率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景介绍

我们在实际项目开发过程中,不同level的童鞋由于专业技能的层次不同,导致在参与实际开发的业务代码中经常会出现各种bug,项目管理中好的pm或许会给充足的时间来让开发童鞋们定位修复这些bug,也有各种客观原因的PM不会在项目中预留这些时间,往往就需要开发自己通过加班来修复赶上项目整体的进度
基于以上背景,那我们有没有一种更有效的方式来保证业务代码的质量呢?
本人推荐的是通过严格的一套单元测试体系来保证我们的代码质量,当然除此之外的手段比如code review、开发规范等等不在本文介绍。

单元测试体系搭建

编写单元测试代码

针对我们的所有业务代码的类进行一对一时的单元测试覆盖,如下图所示:

  1. 业务代码:
@RestController
@RequestMapping("/hello")
public class HelloWorldController {
    @Autowired
    private IHelloWorldService helloWorldService;

    @GetMapping("/say")
    public Result<String> sayHello(@RequestParam(value = "msg",required = false) String msg){
        Result result = new Result();
        result.setCode(200);
        result.setData(helloWorldService.sayHello(msg));
        result.setMsg("OK");
        return result;
    }
}
  1. 对应的单元测试代码如下:

@SpringBootTest
@RunWith(SpringRunner.class)
public class HelloWorldControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private IHelloWorldService helloWorldService;


    @Test
    public void test()throws Exception{

        RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/hello/say").accept(
                MediaType.APPLICATION_JSON);
        MvcResult result= mockMvc.perform(requestBuilder).andReturn();
        Assert.assertEquals(HttpStatus.OK.value(),result.getResponse().getStatus());

    }
}

选用单元测试框架

本人推荐用Jacoco即 Code Coverage for Java的缩写或Emma,本人在idea中安装Jacoco插件按照如下图所示:
如何有效保证Java代码单元测试覆盖率

执行单元测试

如何有效保证Java代码单元测试覆盖率
修改单元测试的框架:
如何有效保证Java代码单元测试覆盖率
执行单元测试:
如何有效保证Java代码单元测试覆盖率
按照如上图所示的操作可以看到单元测试覆盖率如下图:
如何有效保证Java代码单元测试覆盖率

如何有效保证Java代码单元测试覆盖率
按照如上图所示的两步操作完毕之后,会生成如下图所示的site目录:
如何有效保证Java代码单元测试覆盖率

打开如上图所示的index.html文件可以查看网页版的单元测试覆盖率,如下图所示:
如何有效保证Java代码单元测试覆盖率
查看具体某一个类的单元测试覆盖率
如何有效保证Java代码单元测试覆盖率
如上图所示:
单元测试覆盖率主要分为如下几类:
1、代码覆盖率 (Instructions Cov.)
2、逻辑分支覆盖率(Branches Cov.)
3、判断行数覆盖率(Cxty Cov.)
4、代码行数覆盖率(Lines Cov.)
5、方法个数覆盖率(Methods Cov.)
6、类覆盖率(Classes Cov.)

Missed 所在列表示当前类型缺失的数量

总结

其实在具体项目实操过程中发现做整项目所有类的单测工作量是巨大无比的,毫不夸张的说编写单元测试的代码的工作量远远超出了实际编写业务代码的工作量,所以本人介绍的初衷只是告诉诸位技术层面如何有效保证代码质量,具体落地时因地制宜吧,根据实际项目情况技术负责人和PM综合评估而定。文章来源地址https://www.toymoban.com/news/detail-416742.html

到了这里,关于如何有效保证Java代码单元测试覆盖率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单元测试必备:Asp.Net Core代码覆盖率实战,打造可靠应用 !

    在前几章我们深度讲解了单元测试和集成测试的基础知识,这一章我们来讲解一下 代码覆盖率 ,代码覆盖率是单元测试运行的 度量值 ,覆盖率通常以百分比表示,用于衡量代码被测试覆盖的程度,帮助开发人员评估测试用例的质量和代码的健壮性。常见的覆盖率包括语句覆盖

    2024年04月23日
    浏览(46)
  • cmake + gtest安装使用 C++单元测试 gcov locv代码覆盖率

    CMakeLists.txt速查简单编写 打开–g3 选项,去掉-O2以上级别的代码优化选项;否则编译器会对代码做一些优化,例如行合并,从而影响行覆盖率结果; 这里我比较懒就没有加 加到test目录下的CMakeLists.txt即可 , 其中代码编译完之后会在test/CMakeFiles/test.dir/ 生成test.cpp.gcno文件, 在运

    2024年02月05日
    浏览(41)
  • java & jacoco & powerMock 单元测试覆盖率为0怎么解决

    我们项目中使用powerMock作为单元测试的mock工具,统计项目测试覆盖率使用jacoco编译的结果上传到sonar,但是jacoco 和 powerMock在运行时runtime加载代码的时候自定义了类加载器,所以就会有冲突,导致测试覆盖率为0。 使用命令 mvn clean verify sonar:sonar上传jacoco编译结果(这里sonar命令

    2023年04月08日
    浏览(45)
  • 特性介绍 | MySQL 测试框架 MTR 系列教程(二):进阶篇 - 内存/线程/代码覆盖率/单元/压力测试

    作者:卢文双 资深数据库内核研发 序言: 以前对 MySQL 测试框架 MTR 的使用,主要集中于 SQL 正确性验证。近期由于工作需要,深入了解了 MTR 的方方面面,发现 MTR 的能力不仅限于此,还支持单元测试、压力测试、代码覆盖率测试、内存错误检测、线程竞争与死锁等功能,因

    2024年02月03日
    浏览(50)
  • springboot项目使用Junit5 + mockito + jacoco 实现单元测试以及代码覆盖率检查

    在创建springboot项目时会默认添加spring-boot-starter-test依赖,其中已经包含了junit、mockito依赖,根据springboot版本的不同junit和mockito的版本也会有所不同 先说一下各自功能: junit只说一点,junt4和junit5的注解不同,使用方式略有差异,其他不赘述了,基本用法都懂。 mockito是mock的

    2023年04月23日
    浏览(58)
  • IDFA 单元测试以及单元测试覆盖率步骤

    1、新建java类 随意选择java类文件,新建一个Java类CountVowel,用来统计字符串中元音的个数,代码如下: 2、生成测试类 一)、对写好的类新建测试类,有以下两种方法: 将鼠标光标移动到类名上,使用 Alt+Enter 组合键,如下图,选择 Create Test ,从而新建一个测试类; 右键点

    2024年02月16日
    浏览(43)
  • Sonarqube-8.9版本测试单元测试覆盖率

    junit testNG Spock Jacoco Cobertura SonarQube 不会运行测试或生成报告。要在分析中包含覆盖结果,需要设置第三方覆盖工具来生成报告并配置 SonarQube 以导入这些报告。 生成单元测试覆盖率需要按照以下步骤操作: SonarQube 使用导入的覆盖率报告中的覆盖行和可执行行(或要覆盖的行

    2024年02月02日
    浏览(58)
  • 13.Springboot整合junit5单元测试与生成单元测试覆盖率

    现在基本大公司都要求单元测试了,保证我们代码得质量,而我司更是要求覆盖率要达到60%以上,所以搞一下。 这里有两个方法: 1.使用maven自带得test,idea右侧maven模块执行项目下得test 2.使用cmd命令,在你的项目pom文件所在目录 ,打开cmd,执行如下: 结果如下:打开site文

    2024年02月16日
    浏览(39)
  • maven sonar 扫描单元测试覆盖率为0,但是单元测试数不为0

    最初配置如下: sonar 扫描后的单元测试覆盖率为0。但是但与测试数量不为0. 而配置的 sonar : 单元测试数基于 maven-surefire-plugin 插件 单元测试覆盖率基于 jacoco-maven-plugin 插件。 发现 maven 执行后没有 jacoco.exec 文件。导致 sonar 单元测试覆盖率为 0。并且没有下面的 jacoco 结果文

    2024年02月11日
    浏览(37)
  • 【Maven】单元测试、统计、覆盖率相关插件使用介绍

    maven-surefire-plugin 是 maven 执行单元测试的插件,不显性配置也可以直接使用。 这个插件的 surefire:test 命令会默认绑定 maven 执行的 test 阶段。 执行结束后,默认在 target/surefire-reports 目录下会生成 txt 和 xml 两种格式的结果,不利于直观展示,需要结合其它插件一起使用。 如果

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包