基础概念

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

单元测试的范围

• 接口功能测试

• 边界条件测试

• 所有独立执行通路测试

• 各条错误处理通路测试

• 静态代码分析

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

单元测试引入的原因

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

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

Java Junit3Junit4 Junit5TestNG

Python unittestpytest

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在接口测试中的应用

总结

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

  • 测试用例的编写规则;
  • 校验用例通过与否的方法(断言);
  • 批量运行用例的方法;
  • 通过测试报告查看测试结果;

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

php带参数单元测试_一文搞定单元测试核心概念相关推荐

  1. python装饰器带参数函数二阶导数公式_一文搞定Python装饰器,看完面试不再慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...

  2. koa 接口返回数据_一文搞定 Koa 中间件实现原理

    Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 async 函数, Koa ...

  3. hfss matlab联合仿真_一文搞定matlab 与 STK 联合调试仿真环境配置(文末附软件下载链接)...

    最近在做导师给的课题:卫星星座的快速优化设计. 需要用到matlab 和 STK 来进行联合调试仿真,但是这第一步的环境配置就让我头疼了几天.在好几次重装,失败和查找资料之后,我终于成功实现了matl ...

  4. import 快捷键 自动调整顺序_一文搞定PPT中的快捷键

    不知道大家有没有见到过会PS的同学工作时的场景:一手鼠标移动.指点,另一手在键盘上噼里啪啦按键,屏幕上肉眼可见的速度出现了他们的作品. 操作速度非常快,非常让人羡慕他们的熟练程度. 他们对PS的快捷键 ...

  5. markdown 字体颜色_一文搞定Markdown编辑头条号方法

    Markdown风格 发布自媒体文章时虽然内容非常重要,但是排版更加重要.因为没有外在美,如何让人花时间和精力去了解你的内在美呢. 最早由于公众号的流行,但它自带的编辑器却非常low(注: 现在已经好 ...

  6. wpf怎么让grid表格中元素显示到最顶层_一文搞定PPT中的快捷键

    点击上方"锦乡悦堂",一起愉快的学习吧! 不知道大家有没有见到过会PS的同学工作时的场景:一手鼠标移动.指点,另一手在键盘上噼里啪啦按键,屏幕上肉眼可见的速度出现了他们的作品. 操 ...

  7. sql中当前日期加2个月_一文搞定Mysql日期时间函数

    总第184篇/张俊红 日期和时间函数部分也是我们日常工作中使用频率比较高的一部分.这一篇我们主要讲讲Mysql里面的日期时间相关的函数,不同数据库之间基本相同,只会有个别函数的差异.大家掌握一个数据库 ...

  8. java+输出流++空值_一文搞定Java的输入输出流等常见流

    点赞再看,养成习惯,常用流,多看多练准没错!文章较长,建议收藏再看! 1.IO流分析 什么是IO? I:Input O:Output 通过IO可以完成对硬盘的读和写. IO流的分类. 有多种分类方式: ...

  9. c++求矩阵的秩_一文搞定矩阵相关概念 使用Excel矩阵计算不用愁

    知识要点: 矩阵的本质 矩阵的计算公式 实例演示 背景 矩阵计算是我们经常碰到的一个问题.在几乎所有跟"学问"二字稍微沾点边的东西里,矩阵这个家伙从不缺席.那Excel在其中扮演什 ...

最新文章

  1. IC基础知识(1)集成电路(IC)简介
  2. [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)
  3. 取得程序运行的目录[360度]
  4. mysql无法添加或更新子行_MySQL无法添加或更新子行
  5. 日首相:对韩日问题深感遗憾 将采取强硬应对措施
  6. 使用FFMpeg进行H264编码
  7. Tomcat启动Maven项目异常:java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
  8. 梦想是如何失去的?看小米和魅族发布有感
  9. netkeeper客户端_Netkeeper校园客户端(创翼客户端)下载
  10. pdf 分形 张济忠_分形理论及其研究方法.pdf
  11. web批量打印pdf
  12. win10计算器_好用的Win10系统计算器,终于可以在移动端设备上面来用了
  13. 什么是php数组,PHP数组是什么?
  14. # ubuntu 16.04 vivado2017.4版本用JTAG烧写usrpx310的固件
  15. 主权数字货币给世界银行业敲响警钟
  16. Beyond Compare 提示“缺少评估信息或损坏”
  17. 笔记本电脑怎么录制视频
  18. 又一北京“假名媛”曝光,蹭吃蹭喝21天,暴露人性最真实一面
  19. git获取所有branch_获取Git仓库的所有分支名字
  20. 如何解决苹果笔记本连接显示器显示不全的问题

热门文章

  1. uos连接服务器共享文件夹,使用UOS系统共享文件给其他设备的的办法
  2. 现在的学生太强了,徒手撸了一个小米商城项目(附源码)!
  3. 赠书:“替代Linux”?!全球技术海啸来临!
  4. 2020年最漂亮的Linux发行版
  5. 真香 | 有了这个神器,学习 Vim 终于不难了!
  6. Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档
  7. 百万年薪挖了个P8程序员,难道是“水货”?
  8. IntelliJ IDEA 重大更新:支持CPU火焰图,新增酷炫主题
  9. Spring Security入门(三):密码加密
  10. 大学计算机课算绩点吗,南京大学GPA是如何计算的