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)
2)查看代码覆盖率结果
工具栏按钮:
3)生成代码覆盖率报告
在里面 生成覆盖报告对话框打开,指定存储生成的报告的目标目录,并且可选择选中该复选框在浏览器中打开生成的HTML。
扩展
随着公司的发展,自动化测试脚本的持续集成逐渐要被做起来,那就面临一个自检的问题,我的测试脚本、测试用例是否全覆盖了开发的代码。如何直观地看到代码覆盖率?
本地统计代码覆盖率:jacoco,cobertura
远程统计代码覆盖率:jenkins上下载jacoco插件,并在构建后配置
如果把测试工程(T)跟开发工程(D)分开为两个独立的工程,D部署在独立的服务器上,T工程该如何远程获取D的覆盖率数据呢?
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://lxhua.blog.csdn.net/article/details/81224561


猜你喜欢
- 上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你
- DAO层测试难点可重复性,每次运行单元测试,得到的数据是重复的独立性,测试数据与实际数据相互独立数据库中脏数据预处理不能给数据库中数据带来变
- 最近用了Stream流,感觉超好用,记录一下。1、快速创建List比如我有个实体类User,User有个属性Namepublic class
- Unicode有四种编码格式,UTF-8, UTF-16,UTF-32,UTF-7。字符编码类,ASCIIEncoding ,UTF7Enc
- Netty是一个非常优秀的Socket框架。如果需要在SpringBoot开发的app中,提供Socket服务,那么Netty是不错的选择。
- 使用 WebView 时,我们通常会重写以下方法:shouldOverrideUrlLoading() onPageStarted()onP
- 一、@Value读取application.properties配置文件中的值application.properties配置文件fileN
- 前言:在 Java 中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和
- 先看效果:输入内容,点击生成二维码:点击logo图案:代码:QRCodeUtil:package com.example.administr
- Socket异常客户端异常java.net.ConnectException: Connection refused: connect。该异
- NTP是Android原生通过网络获取时间的机制,其中关键代码逻辑都在NetworkTimeUpdateService,它是Android系
- 前言本文主要是将最近工作中遇到的一个问题进行总结分享,主要介绍的是如何让WebView中H5页面全屏播放视频。关于这个问题,做一下简单分析,
- 1. 启用HTTPS修改配置application.ymlserver:# port: 80 port: 443 s
- 这篇文章主要介绍了简单了解java标识符的作用和命名规则,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- #region 监视文件夹的变化
- Selenium IDE 是Firefox 浏览器的一个插件, 它会记录你对Firefox的操作,并且可以回放它的操作。 用法简单,不过我觉
- 需求分析文档可以和项目一起进行版本管理文档可以在线访问文档可以与springboot项目集成,不需要分开部署MarkDown支持文档跟随,打
- 宏定义与预处理命令预处理阶段:处理宏定义与预处理命令;编译期:检查代码,分析语法、语义等,最后生成.o或.obj文件;链接期:链接所有的.o
- 前言本文主要给大家介绍了关于C#基础之Attribute和反射的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。A
- 1、动态SQL片段通过SQL片段达到代码复用 <!-- 动态条件分页查询 --> <sql i