首页 > 其他分享 >一文搞定单元测试核心概念

一文搞定单元测试核心概念

时间:2023-09-27 11:31:40浏览次数:27  
标签:搞定 一文 int 单元测试 用例 测试 Calc public


基础概念

单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类。单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被测试的软件如何完成功能和完成什么样的功能。我们熟知的Junit、TestNG、unittest、pytest就是单元测试的一种具体表现形式。

单元测试的范围

•      接口功能测试

•      边界条件测试

•      所有独立执行通路测试

•      各条错误处理通路测试

•      静态代码分析

其中,前两项接口功能测试和边界条件测试就是我们熟知的接口测试!而对于后三项通常都是开发人员通过工具辅助自测完成的,常用的工具括:Sonar、PMD、FindBugs、Checkstyle、Jacoco等等(好多工具都集成到IDE中,开发人员使用非常方便)。

单元测试引入的原因

单元测试提供快速反馈,把bug消灭在开发阶段,减少问题流到集成测试、验收测试和用户,降低了软件质量控制的成本。

不同的开发语言都有对应的单元测试框架

Java         Junit3\Junit4\ Junit5\TestNG

Python        unittest\pytest

C++          CppUnit

.net          Nunit

JavaScript       Qunit

本文只介绍单元测试的通用概念,至于具体框架的使用细节以及框架间的区别在这里不会赘述。一般单元测试框架都会提供以下基础功能:测试用例的编写规则,校验用例通过与否的方法(断言),批量运行用例的方法,通过测试报告查看测试结果。高级功能包括:用例的前置\后置条件,用例执行超时校验、异常校验、用例参数化、用例之间的依赖、多线程运行用例、用例分组等等。

实例讲解

举一个Java程序猿进行单元测试的实例:

public class Calc {
    public int add(int a, int b) {
       return a + b;
    }
    public int substract(int a, int b) {
       return a - b;
    }
    public int multiply(int a, int b) {
       return a * b;
    }
}

使用Junit4对类Calc 进行单元测试

public class CalcTest
{
   @Test
   public void test_1()
{
    Calc c=new Calc();
      int result=c.add(1,1);
      assertEquals(2,result);   
}
   @Test
   public void test_2()
{
     Calc c=new Calc();
       int result=c.substract(1,1);
       assertEquals(0,result);   
}
 
   @Test
   public void test_3()
{
       Calc c=new Calc();
       int result=c.multiply(1,1);
        assertEquals(1,result);   
}
}

我们不难看出,单元测试的本质是通过代码对类中的方法进行测试(首先实例化类,然后调用需要测试的方法),进而判断方法(通常使用断言)的运行结果是否符合我们的预期!其中用@Test 标签修饰的方法表示测试用例,assertEquals代表断言(第一个参数是期望结果,第二个参数是实际运行结果),下图表示运行后的测试结果。

一文搞定单元测试核心概念_java

我们再写一个测试类,故意出现错误的期望结果,代码如下:

public class CalcTest2
{
   @Test
   public void test_1()
{
     Calc c=new Calc();
       int result=c.add(1,1);
      assertEquals(3,result);   
}
 
   @Test
   public void test_2()
{
      Calc c=new Calc();
       int result=c.substract(1,1);
       assertEquals(1,result);   
}
}

运行结果如下:

 

一文搞定单元测试核心概念_java_02

 

 

通过suite执行多个用例

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({CalcTest.class,CalcTest2.class })
public class AllTests
{
}

可以看到,同时执行了两个类中的测试用例,如下图所示:

 

一文搞定单元测试核心概念_java_03

 

以上就是单元测试中最最基础的内容,利用以上知识点,我们就可以开展自动化测试了!

Selenium在junit4中进行web自动化测试的详情可以阅读我的文章 一文搞定Java和Python在Selenium3中的应用

Httpclient在junit4中进行接口自动化测试的详情可以阅读我的文章 一文搞定Java和Python在接口测试中的应用

总结

单元测试框架的设计目的是方便开发人员对自己代码进行测试的,但随着近年来对测试人员要求代码技能的提升,也逐渐进入了测试人员的视野,现在俨然成为了测试人员的必备技能之一!本文带读者了解单元测试的本质,无论大家使用哪种测试框架,都会涉及到这些核心知识点!当然,不同的框架会有不同的实现表达形式,也会提供不同的额外功能来满足不同的测试需求,但是灵魂的东西都是一样的,总结起来就是以下四点:

测试用例的编写规则;

校验用例通过与否的方法(断言);

批量运行用例的方法;

通过测试报告查看测试结果;

原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!

标签:搞定,一文,int,单元测试,用例,测试,Calc,public
From: https://blog.51cto.com/liwen629/7622471

相关文章

  • 一文搞定持续集成核心概念
    持续集成基础概念持续集成CI(ContinuousIntegration)是一种软件开发实践,团队成员频繁地将他们的工作成果集成在一起。通常是每人每天至少提交一次,这样每天就有多次集成。每次提交后,自动触发一次包含自动化测试的构建任务,以便能尽早发现集成问题。通过这种方式,许多团队大大减少了集成......
  • 测试驱动技术(TDD)系列之1:一文带你上手测试数据驱动
    数据驱动的意义数据驱动,指在自动化测试中处理测试数据的方式。通常测试数据与功能函数分离,存储在功能函数的外部位置。在自动化测试运行时,数据驱动框架会读取数据源中的数据,把数据作为参数传递到功能函数中,并会根据数据的条数多次运行同一个功能函数。数据驱动的数据源可以是函数外......
  • 五分钟搞定幂等本质
    幂等概念幂等性原本是数学上的概念,即使公式:f(f(x))=f(x)能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。幂等性是系统服务对外一种承诺,承诺只要调用接口成功,外部多次调用对系统的影响是一致的。声明为幂等......
  • 一文读懂倒排序索引涉及的核心概念
    基础概念相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是倒排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下倒排序索引,这个概念搞明白之后,然后学习Elasticsearch就会清晰很多了。正向索引和......
  • 一文告诉你Istio和 spring cloud该怎么选
    相信了解SpringCloud的朋友在刚刚开始接触Istio的时候一定会有一个疑问:Istio和springcloud也太像了,他们都可以提供服务发现、负截均衡、限流、链路跟踪、鉴权等微服务治理手段,那么二者的主要区别是什么呢?本文就会带大家理解二者的区别,如果您目前对微服务和ServiceMesh还不了......
  • 一文读懂:下一代微服务技术Service Mesh
    相信提到微服务大家一定不会陌生,但是说起服务网格,即ServiceMesh,很多同学可能就会画大大的问号了!话不多说先给结论:我们可以简单的把ServiceMesh理解为网络代理,它可以解决传统微服务中的痛点,把服务通信及相关管控功能从业务中分离!网络代理网络代理可以简单类比成现实生活中的中......
  • 一文搞定Pandas核心概念之Series
    Pandas概述Pandas是Python语言的一个扩展程序库,他是一个强大的分析结构化数据的工具集,基础是Numpy,用于数据分析。安装Pandas命令:pipinstallpandasPandas的主要数据结构是Series(一维数据)与DataFrame(二维数据),Series是一种类似于一维数组的对象,它由一组数据(各种Numpy数据......
  • 一文搞定Pandas核心概念之DataFrame
     DataFrame概述DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同用一个索引)。如下图所示:整个表格是DataFrame,每一列就是一个Series。关于Series可以参考文......
  • 干货!一文搞定无头浏览器的概念以及在selenium中的应用
     无头浏览器无头浏览器,即HeadlessBrowser,是一种没有界面的浏览器。它拥有完整的浏览器内核,包括JavaScript解析引擎、渲染引擎等。与普通浏览器最大的不同是,无头浏览器执行过程中看不到运行的界面,但是我们依然可以用GUI测试框架的截图功能截取它执行中的页面。在这里强调一下......
  • 测试技能提升篇——一文理解消息中间件里那些通用的核心概念
    我们测试同学在实际工作中或多或少都会接触过ActiveMQ、RabbitMQ,Kafka,和RocketMQ这类消息中间件产品,不同的公司会选择不同的产品,大家可能会觉得产品比较多,了解起来有些复杂!其实无论使用哪种中间件产品,他们的核心功能都是比较类似的。本文就不来汇总一下中间件产品的核心概念,给大家......