一文搞定单元测试核心概念 单元测试主要包括
haoteby 2024-12-15 13:11 33 浏览
基础概念
单元测试(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在接口测试中的应用
总结
单元测试框架的设计目的是方便开发人员对自己代码进行测试的,但随着近年来对测试人员要求代码技能的提升,也逐渐进入了测试人员的视野,现在俨然成为了测试人员的必备技能之一!本文带读者了解单元测试的本质,无论大家使用哪种测试框架,都会涉及到这些核心知识点!当然,不同的框架会有不同的实现表达形式,也会提供不同的额外功能来满足不同的测试需求,但是灵魂的东西都是一样的,总结起来就是以下四点:
- 测试用例的编写规则;
- 校验用例通过与否的方法(断言);
- 批量运行用例的方法;
- 通过测试报告查看测试结果;
原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!
相关推荐
- 如何为MySQL服务器和客户机启用SSL?
-
用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...
- k8s 证书问题排查_k8s dashboard 证书
-
从去年开始一些老项目上陆陆续续出现一些列的证书问题,(证书原理这里就不说了,官方文档一堆)多数刚开始的表现就是节点的kubelet服务起不来,节点状态NotReady表现日志如下failed...
- 企业级网络互通方案:云端OpenVPN+爱快路由器+Win11互联实战
-
企业级网络互通方案:OpenVPN搭建公有云+爱快路由器+Win11三地互联实战指南「安全高效」三地局域网秒变局域网实施环境说明...
- OpenV** Server/Client配置文件详解
-
Server配置详解...
- 接口基础认知:关键信息与合规前提
-
1.核心技术参数(必记)...
- S交换机通过SSH登录设备配置示例(RADIUS认证+本地认证独立)
-
说明:●本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。●通过不同的管理域来实现RADIUS认证与本地认证两种方式同时使用,两...
- SSL证书如何去除私钥密码保护_ssl证书怎么取消
-
有时候我们在生成证书的时候可以加入了密码保护。然后申请到证书安装到了web服务器。但是这样可能会带来麻烦。每次重启apache或者nginx的时候,都需要输入密码。那么SSL证书如何去除私钥密码保护。...
- SSL证书基础知识与自签名证书生成指南
-
一、证书文件类型解析...
- S交换机通过SSH登录设备配置示例(RADIUS认证)
-
说明:本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。假设已在RADIUS服务器上创建了用户名yc123,密码test#123。对...
- HTTPS是什么?加密原理和证书。SSL/TLS握手过程
-
秘钥的产生过程非对称加密...
- HTTPS TLS握手流程_进行tls握手
-
1.客户端向服务器发送`ClientHello`消息,包括支持的TLS版本、加密套件、随机数等信息。2.服务器收到`ClientHello`消息后,解析其中的信息,并根据配置选择一个加密套件。3....
- Spring Boot 单点登录(SSO)实现_spring boot 单点登录jwt
-
SpringBoot单点登录(SSO)实现全指南单点登录(SingleSign-On,SSO)是一种身份验证机制,允许用户使用一组凭证登录多个相关但独立的系统。在微服务架构和企业级系统中,SS...
- 源码分享:在pdf上加盖电子签章_pdf如何加盖电子公章
-
在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...
- 微信支付商户API证书到期 怎么更换
-
微信支付商户API证书到期更换是一个非常重要的操作,需要仔细按照流程进行。如果证书过期,所有通过API的支付、退款等操作都会失败,将直接影响您的业务。请按照以下详细步骤进行操作:重要前提:分清...