unittest单元测试框架原理--理解

2024-08-20 21:08

本文主要是介绍unittest单元测试框架原理--理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 一、unittest 框架最核心的四个概念:TestCase、TestSuite、TestRunner、Testfixture
  1. TestCase:自定义的测试用例类,里面写入的是对具体的某个模块进行测试的方法;所有的方法名都必须以test开头。TestCase中的方法和属性:
    • setup() 方法:用于测试用例执行前的初始化工作,每个测试方法执行前都会执行一次;比如:登录web页,访问数据库;
    • tearDown() 方法:用于测试用例执行完成后的清理工作;每个测试方法执行后都会执行一次;比如:关闭网页,断开链接;
    • assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。
      • assertEqual (a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,相等则测试用例通过。
        assertNotEqual (a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,不相等则测试用例通过。
        assertTrue (x,[msg='测试失败时打印的信息']):断言x是否True,是True则测试用例通过。
        assertFalse (x,[msg='测试失败时打印的信息']):断言x是否False,是False则测试用例通过。
        assertIs (a,b,[msg='测试失败时打印的信息']):断言a是否是b,是则测试用例通过。
        assertNotIs (a,b,[msg='测试失败时打印的信息']):断言a是否是b,不是则测试用例通过。
        assertIsNone (x,[msg='测试失败时打印的信息']):断言x是否None,是None则测试用例通过。
        assertIsNotNone (x,[msg='测试失败时打印的信息']):断言x是否None,不是None则测试用例通过。
        assertIn (a,b,[msg='测试失败时打印的信息']):断言a是否在b中,在b中则测试用例通过。
        assertNotIn (a,b,[msg='测试失败时打印的信息']):断言a是否在b中,不在b中则测试用例通过。
        assertIsInstance (a,b,[msg='测试失败时打印的信息']):断言a是是b的一个实例,是则测试用例通过。
        assertNotIsInstance (a,b,[msg='测试失败时打印的信息']):断言a是是b的一个实例,不是则测试用例通过。
    • 通过dir(unittest),可以看到unittest全部的属性和方法
  2. TestSuite:测试套件,用于装测试用例;使用addTest()方法手动增加Test Case到测试套件中;
  3. TestRunner:运行测试用例的驱动类,使用TestRunner中的run()方法来运行测试套件中的测试用例;
  4. Testfixture:可以把fixture看做是资源,在测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。一个测试类,通常有多个测试方法,都需要某些共用的“数据”,比如说都需要起浏览器, 比如说都要访问某个数据库的某张表;Fixture:包括setUp和tearDown方法,有下面两种:
    • setUpClass(), tearDownClass()的方式,分别在每个测试类执行前后执行, setUpClass()和tearDownClass()只会执行一次,即使这个测试类有多个测试函数。
    • setup(), teardown()的方式,分别在每个测试方法执行前后执行。
  • 二、unitest 其他属性:
    • unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。
      • @unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。
      • @unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。
      • @unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。
      • @unittest.expectedFailure(): expectedFailure()测试标记为失败。
  •  

 

这篇关于unittest单元测试框架原理--理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091174

相关文章

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流

深入理解Go之==的使用

《深入理解Go之==的使用》本文主要介绍了深入理解Go之==的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录概述类型基本类型复合类型引用类型接口类型使用type定义的类型不可比较性谈谈map总结概述相信==判等操作,大

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS