IDEA 单元测试覆盖技巧分享

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的覆盖率数据呢?

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

(0)

相关推荐

  • 在IDEA中 实现给main方法附带参数的操作

    一. 测试代码: 二.添加参数 1.在终端工具中 ①先编译: javac Test.java ②再运行: java Test args1 args2 args3 注:参数之前用空格隔开 如下图所示: 2.在idea中添加参数 ①点击Run下的Edit Configurations ②配置Configuration页中的Program arguments选项,就可以在idea中传入参数,参数之间用空格隔开. 如下图所示: 补充:IDEA中运行JavaSE程序向main函数传递参数 在实现JAVA核

  • idea +junit单元测试获取不到bean注入的解决方式

    如图,刚开始报错获取不到bean因为配置文件 1.原因一: *.properties等没有值,还是用${变量的}.获取不到,于是把所有值复制到properties文件里. 2.原因二: springmvc.xml 没有某些静态资源获取报错,把src的resources下的springmvc.xml复制到test目录的resources下,删除静态资源引用. 3.原因三: 可去掉log4j配置. 补充知识:IDEA的junit单元测试Scanner输入无效 在idea的junit单元测试中用Sca

  • IDEA 单元测试创建方法详解(2020.03版本亲测)

    IntelliJ IDEA创建单元测试 在 Android 中,单元测试基于 JUnit,JUnit 的平面使用足以测试完全基于 Java 代码的功能. 但是,为了测试 Android 特定的功能,您需要一堆构建在 JUnit 之上的包装类.IntelliJ IDEA 简化了 Android 测试项目构建过程中的大部分任务. 1.确保你的代码是可测试的 单元测试要求源代码的编写方式使得模块之间的依赖关系可以很容易地通过模仿来消除.另外,单元测试要求功能相互隔离. 因为这个 HelloDroid

  • Idea去除方法形参参数提示的操作

    描述: Idea安装完成默认自带方法参数提示,虽然比较友好,但是看起来特别不清晰,所以选择关闭 步骤: 1.File -> Settings进入设置(快捷键Ctrl + Alt + S) 2.按照下图进行展开然后取消勾选4处的勾,然后确认即可取消方法参数提示 补充:IDEA 鼠标放在类或方法上显示围挡结构 使用快捷键[Ctrl+Alt+S]打开设置,按下图操作 以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们.如有错误或未考虑完全的地方,望不吝赐教.

  • IDEA GIT 忽略文件的最佳方式推荐

    在intellij中忽略提交文件,分两种情况, 文件没有纳入版本管理 第一种方法 文件还没有纳入版本管理,这种通过 svn的ignore配置 version control--local changes--configure ignored files 忽略文件分几大类,忽略某个文件夹.忽略某类文件(正则).忽略某个文件 文件已经纳入版本管理 如果文件已经纳入版本了,应该采用第二种方法 第二种方法 主要应对文件已经纳入版本管理,但不想再提交,比如,不小心提交的eclipse.intellij的文

  • IDEA 单元测试覆盖技巧分享

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

  • 使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以上两个问题. (2)具体步骤如下: 1.第一步,安装openpyxl, 使用pip install openpyxl即可,但是在windows下安装的是2.2.6版本,但是centos自动安装的是4.1版本,(多谢海哥的提醒). 写的代码在windows下运行没问题,但centos上却报错了,说是e

  • python技巧分享Excel创建和修改

    openpyxl是一个读写Excel文档的Python库,能够同时读取和修改Excel文档. openpyxl是一个开源项目,因此在使用之前需要先进行安装: pip install openpyxl openxpyxl中有三个不同层次的类,分别是Workbook.Worksheet和Cello.Workbook是对Excel工作簿的抽象,Worksheet是对表格的抽象,Cell是对单元格的抽象.每一个类都包含了若干属性和方法,以便于我们通过这些属性和方法获取表格中的数据.一个Workbook对

  • java修饰类的使用方法以及使用技巧(分享)

    本次主要说明装饰类的使用方法以及注意点,在java编程中装饰类主要是对已经有的类进行增强其方法.在实际应用中我们不可能更改某个项目的源代码. /*装饰设计模式 * 当想要对已经有的对象进行功能增强时, * 可以定义类,将已有的队形传入,基于已有的功能,并提供加强功能. * 那么自定义的该类称为装饰类 * * * 装饰类只是对已有的某个类进行加强.前提是必须有这个类.*/ import java.util.*; class Chifan{ public void chifan(){ System.

  • 注释PHP和html混合代码的小技巧(分享)

    我们在写php的时候有时候会遇到想要注释一部分的代码,是由html和PHP混合组成的,这时候如果一行一行去分开注释有点麻烦.但是又不敢删掉,这时候我们可以充分利用if语句去进行注释的功能 <?php if (1==2):?> //代码片段 <?php endif;?> 以上就是小编为大家带来的注释PHP和html混合代码的小技巧(分享)全部内容了,希望大家多多支持我们~

  • python语言使用技巧分享

    一 在写之前 最好指定python的路径: #!/usr/bin/python python 在linux中需要添加编码方式:以免出现中文乱码 # -*- coding: UTF-8 –*- 二 在各类语言中,python应该是最会利用识缩进的语言 ,他的for语句即使有多行也不需要想java,C++.c一样使用{} ,可以像js.swift一样同换行符代表一句话,而不是使用: 号.有学过语言背景的同学请注意: 在python看来: 如果改变了缩进的方式,例如在第二个for上缩进,会导致错误:

  • mysql 列转行的技巧(分享)

    前言: 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果. 表数据: ID Value 1 tiny,small,big 2 small,medium 3 tiny,big 期望得到结果: ID Value 1 tiny 1 small 1 big 2 small 2 medium 3 tiny 3 big 正文: #需要处理的表 create tabl

  • linux下命令行操作快捷键及技巧(分享)

    历史相关命令 !!:执行上一条命令 !num:执行历史命令中第num条命令 !-num:执行历史命令中倒数第num条命令 !?string?:执行最近一条包含有string字符串的命令 Ctrl+r:搜索上一条匹配的命令 !$:代表上一个命令的最后一个字符串 Esc+.:显示上一个命令的最后一个字符串 移动相关命令 Ctrl+a:将光标移到行首 Ctrl+e:将光标移到行尾 Ctrl+右箭头:向右移动一个单词 Ctrl+左箭头:向左移动一个单词 Ctrl+f:向右移动一个字符,相当于按向右按键

  • js中string和number类型互转换技巧(分享)

    1.string-->number string类型   *1  即可变成  number类型 2.number-->string number类型  +''  即可变成  string 类型 <script type="text/javascript"> function screenInfo() { var str = '012.8372'; var s = 0; str = str * 1; alert(typeof (str));//number s +

  • 十分简单易懂的Java应用程序性能调优技巧分享

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这里有11个易于遵循的建议和最佳实践可以帮助你创建一个性能良好的应用程序. 大部分建议是针对Java的.但也有若干建议是与语言无关的,可以应用于所有应用程序和编程语言.在讨论专门针对Java的性能调优技巧之前,让我们先来看看通用技巧. 1.在你知道必要之前不要优化 这可能是最重要的性能调整技巧之一.你

随机推荐