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

作者: 测试开发Kevin | 来源:发表于2020-04-29 13:52 被阅读0次

基础概念

单元测试(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代表断言(第一个参数是期望结果,第二个参数是实际运行结果),下图表示运行后的测试结果。

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

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);   

}

}

运行结果如下:

通过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

{

}

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

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

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

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

总结

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

测试用例的编写规则;

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

批量运行用例的方法;

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

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

相关文章

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

    基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常...

  • 一文搞定Pandas核心概念之Series

    Pandas概述 Pandas 是 Python 语言的一个扩展程序库,他是一个强大的分析结构化数据的工具集,基础...

  • pythonx5-单元测试

    单元测试 unittest核心工作原理unittest中最核心的四个概念是:test case, test sui...

  • 一文搞定持续集成核心概念

    持续集成基础概念 持续集成CI(Continuous Integration)是一种软件开发实践,团队成员频繁地将...

  • python—unittest接口测试框架

    一、unittest初级使用 单元测试中最核心的四个概念:test case(测试用例),test suite(测...

  • 收录

    一文搞定MySQL性能调优

  • 3/26day19_JUnit单元测试_NIO

    day19_JUnit单元测试_NIO 复习 今日内容 Junit单元测试[重点] 单元测试概念 什么叫单元测试单...

  • 软件测试结束的标准是什么?

    单元测试退出标准 1)单元测试用例设计已经通过评审 2)核心代码100%经过CodeReview 3)单元测试功能...

  • phpUnit_思路梳理

    正在研究phpunit,发现对单元测试有独特见解的文章记录下: 概念 要写单元测试,必须要有一些基本概念。这些概念...

  • Java单元测试杂谈

    1.概念 单元测试概念参考百科吧,好的单元测试感觉像空气一样并不存在,但又不可或缺。单元测试遵守AIR原则(摘自《...

网友评论

    本文标题:一文搞定单元测试核心概念

    本文链接:https://www.haomeiwen.com/subject/xnvgwhtx.html