IDEA 单元测试覆盖技巧分享

作者:蓝星花 时间:2022-09-09 03:50:26 

1.前言

通常情况下,项目经理or项目总监会分阶段的问测试负责人,本阶段的测试覆盖率是多少?在工作中,当被问到“如何提高代码质量”,回答无非如下几个,增加评审,代码规约,单元测试。不知起自何年何月,如今一些机构开始引入“单元测试覆盖率”的概念,并由此对程序员提出了覆盖率要达到70%,90%,以此来评判程序员工作的质量,以及产品的质量。这里先预为单元测试下定义以免混淆,即,基于Junit,类与代码级别的,与运行时无关的白盒测试。

2.我的理解

测试覆盖率应该区分自动化测试覆盖率和功能测试用例覆盖率。

对于自动化测试覆盖率,应是=(自动化测试脚本执行过的代码/总代码)

对于测试用例覆盖率,应是=(测试用例覆盖的功能点/产品设计的所有功能点)

3.什么是单元测试

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

3.1好处

1,单元测试不但会使你的工作完成得更轻松。而且会令你的设计会变得更好,甚至大大减少你花在调试上面的时间

2,提高代码质量

3,减少bug,快速定位bug

4,放心地修改、重构

5,显得专业(玩笑话)

3.2注意

1,不能只测试一条正确执行路径,要考虑到所有可能的情况

2,要确保所有测试都能够通过,避免间接损害

3,如果一个函数复杂到无法单测,那就说明模块的抽象有问题

(1)语句覆盖法

(2)分支覆盖法

(3)条件覆盖法

(4)组合条件覆盖法

4.IDEA 单元测试覆盖技巧


package com.example.demoo.junit;
/**
* Created by lanxinghua on 2018/7/26.
*/
public class Myclass {
 public String test1(){
   return "test1!";
 }

public String test2(){
   return "test2";
 }
}

package com.example.demoo;
import com.example.demoo.junit.Myclass;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
public class JunitTest {
 private Myclass myclass;
 @Before
 public void setUp() {
   myclass = new Myclass();
 }

@Test
 public void testHello(){
   myclass.test1();
 }
}

1)启动单元测试覆盖模式(Run “*” with Coverage)

IDEA 单元测试覆盖技巧分享

2)查看代码覆盖率结果

IDEA 单元测试覆盖技巧分享

工具栏按钮:

IDEA 单元测试覆盖技巧分享

3)生成代码覆盖率报告

IDEA 单元测试覆盖技巧分享

在里面 生成覆盖报告对话框打开,指定存储生成的报告的目标目录,并且可选择选中该复选框在浏览器中打开生成的HTML。

IDEA 单元测试覆盖技巧分享

IDEA 单元测试覆盖技巧分享

扩展

随着公司的发展,自动化测试脚本的持续集成逐渐要被做起来,那就面临一个自检的问题,我的测试脚本、测试用例是否全覆盖了开发的代码。如何直观地看到代码覆盖率?

本地统计代码覆盖率:jacoco,cobertura

远程统计代码覆盖率:jenkins上下载jacoco插件,并在构建后配置

如果把测试工程(T)跟开发工程(D)分开为两个独立的工程,D部署在独立的服务器上,T工程该如何远程获取D的覆盖率数据呢?

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://lxhua.blog.csdn.net/article/details/81224561

标签:IDEA,单元测试,覆盖
0
投稿

猜你喜欢

  • Unity实现10天签到系统

    2022-07-11 23:40:01
  • SpringBoot Mybatis动态数据源切换方案实现过程

    2022-10-12 03:25:03
  • C#多线程系列之资源池限制

    2022-01-02 17:11:04
  • java的url方式、本地方式获取json文件内容

    2023-08-22 18:30:23
  • 一文详解Java抽象类到底有多抽象

    2023-08-27 01:41:26
  • Java几种常用的断言风格你怎么选

    2021-10-30 23:30:32
  • C#推送信息到APNs的方法

    2023-05-29 05:20:59
  • Java中的Object类详细介绍

    2023-11-23 23:18:46
  • 在maven工程里运行java main方法

    2023-09-18 04:33:20
  • JAVA字符串拼接常见方法汇总

    2021-11-13 03:11:31
  • java代码实现MD5加密及验证过程详解

    2023-09-26 02:50:45
  • Java实现聊天机器人完善版

    2022-10-07 09:31:11
  • Java NIO Buffer实现原理详解

    2023-12-10 22:37:37
  • Windows实现Flutter环境搭建及配置这一篇就够了

    2023-07-03 22:49:30
  • C#串口通讯概念及简单的实现方法

    2021-06-25 13:49:24
  • Java序列化与反序列化的实例分析讲解

    2022-09-16 05:58:39
  • C# 基于NAudio实现对Wav音频文件剪切(限PCM格式)

    2022-08-31 09:55:18
  • c# 使用Task实现非阻塞式的I/O操作

    2023-07-21 23:27:39
  • Mybatis通过Spring完成代理类注入的流程分析

    2023-10-25 00:55:55
  • c# WPF中CheckBox样式的使用总结

    2023-07-17 15:44:46
  • asp之家 软件编程 m.aspxhome.com