11.测试代码

2023-11-01

测试函数:单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,一起核实函数各种情形下的行为都符合要求;全覆盖式测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。为函数编写测试用例,可先导入模块unittest以及要测试的函数,再创建一个集成unittest.TestCase的类,并编写一系列方法对函数行为的不同方面进行测试。断言方法用来核实得到的结果是否与期望的结果一致,此处用到了unittest的方法assertEqual()。代码行unittest.main()让Python运行这个文件中的测试,即所有以test_打头的方法。当测试未通过时,不要修改测试,而应该修复导致测试不能通过的代码。
在这里插入图片描述

# -*- coding: GBK -*-   
'''导入模块unittest和测试函数之后,创建继承unittest.TestCase的类,
编写一系列的方法对函数行为的不同方面进行测试。
断言方法(assertEqual()):核实得到结果是否和预期结果一致'''
import unittest
from name_function import get_formatted_city
from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):
    def test_first_last_name(self):
        formatted_name = get_formatted_name('janis', 'joplin')
        self.assertEqual(formatted_name, 'Janis Joplin')
    def test_first_last_middle_name(self):
        formatted_name = get_formatted_name('wolfgang', 'mozart', 'amadeus')
        self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')

class CityTestCase(unittest.TestCase):
	def test_city_country(self):
		formatted_city = get_formatted_city('Santiago', 'Chile')
		self.assertEqual(formatted_city, 'Santiago, Chile')
	def test_city_country_population(self):
		formatted_city = get_formatted_city('Santiago', 'Chile', 5000000)
		self.assertEqual(formatted_city, 'Santiago, Chile - population 5000000')

# 让python运行这个文件的测试,自动运行test_打头的方法
unittest.main()

在这里插入图片描述
运行结果解析:第一行的句点表示有4个测试通过了,接下一行指运行4个测试消耗的时间,最后的OK表明该测试用例中的所有单元你测试都通过了(测试通过时打印一个句点,测试引发错误时打印一个E,测试导致断言失败时打印一个F。若有测试未通过,则最后的OK改为FAILED,并提示有几个错误)

测试类:与函数的测试相似,大部分工作都是测试类中方法的行为。6个常用的断言方法,可核实返回的值等于或不等于预期的值、返回的职位True或False、返回的值在列表中或不在列表中。在继承unittest.TestCase的类中使用这些方法。

  • assertEqual(a, b) 核实a == b
  • assertNotEqual(a, b) 核实a != b
  • assertTrue(x) 核实x为True
  • assertFalse(x) 核实x为False
  • assertIn(item, list) 核实item在list中
  • assertNotIn(item, list) 核实item不在list中

要测试类的行为,需要创建其实例。unittest.TestCase类包含方法setUp(),让我们只需创建这些对象一次,并在每个测试方法中使用它们,若TestCase类中包含方法setUp(),Python将先运行它,再运行各个以test_打头的方法。
setUp()方法中创建一系列实例并设置它们的属性,再在测试方法中直接使用这些实例。以下代码中第一个TestCase类中的setUp()做了两件事情:创建一个调查对象、创建一个答案列表。存储这两样东西的变量名包含前缀self(即存储在属性中),因此可在这个类的任何地方使用。
survey.py 文件代码如下:

# -*- coding: GBK -*-
class AnonymousSurvey():
	'''收集匿名调查问卷答案'''
	def __init__(self, question):
		'''存储问题,为存储答案做准备'''
		self.question = question
		self.responses = []
	
	def show_question(self):
		'''显示调查问卷'''
		print(self.question)
	
	def store_response(self, new_response):
		'''存储单份调查问卷'''
		self.responses.append(new_response)
		
	def show_results(self):
		'''显示收集到的所有答卷'''
		print("Survey result:")
		for response in self.responses:
			print("- " + response)

# ~ # 定义问题,创建实例对象
# ~ question = 'What language did you first learn to speak?'
# ~ my_survey = AnonymousSurvey(question)
# ~ # 显示问题并存储答案
# ~ my_survey.show_question()
# ~ print("Enter 'q' at any time to quit.\n")
# ~ while True:
	# ~ response = input("Language: ")
	# ~ if response == 'q':
		# ~ break
	# ~ my_survey.store_response(response)
# ~ # 显示调查结果
# ~ print("\nThank you to everyone who participated in the survey!")
# ~ my_survey.show_results()	


class Employee():
	'''记录姓名和年薪'''
	def __init__(self,first_name, last_name, yearly_salary):
		'''初始化属性'''
		self.first_name = first_name
		self.last_name = last_name
		self.yearly_salary = yearly_salary
	
	def give_raise(self, raise_salary=''):
		if raise_salary:
			self.yearly_salary += int(raise_salary)
		else:
			self.yearly_salary += 5000
	
# ~ my_employee = Employee('hui', 'liu', 5000)
# ~ my_employee.give_raise()
# ~ print(my_employee.yearly_salary)

执行文件代码如下:

import unittest

from survey import AnonymousSurvey
from survey import Employee

class TestAnonymousSurvey(unittest.TestCase):
	'''针对类AnonymouseSurvey的测试'''
	
	def setUp(self):
		'''创建一个调查对象和一组答案,供使用的的测试方法使用'''
		question = "What language did you first learn to speak?"
		self.my_survey = AnonymousSurvey(question)
		self.responses = ['English', 'Spanish', 'Mandarin']
	
	def test_store_single_response(self):
		'''测试单个答案会被妥善地处理'''
		self.my_survey.store_response(self.responses[0])
		self.assertIn(self.responses[0], self.my_survey.responses)
		
	def test_store_three_responses(self):
		'''测试三个答案是否会被妥善处理'''
		for response in self.responses:
			self.my_survey.store_response(response)
		for response in self.responses:
			self.assertIn(response, self.my_survey.responses)

class EestEmployee(unittest.TestCase):
	'''针对类Employee的测试'''
	def setUp(self):
		'''创建一个员工对象'''
		self.my_employee = Employee('hui', 'liu', 5000)
		
	def test_give_default_raise(self):
		'''测试默认增加年薪'''
		self.my_employee.give_raise()
		self.assertEqual(self.my_employee.yearly_salary, 10000)
		
	def test_give_custom_raise(self):
		'''测试自定义增加年薪'''
		self.my_employee.give_raise(6000)
		self.assertEqual(self.my_employee.yearly_salary, 11000)
		
unittest.main()

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

11.测试代码 的相关文章

  • C++:STL:常用算法(下):拷贝,算术,集合算法

    一 常用拷贝和替换算法 学习目标 掌握常用的拷贝和替换算法 算法简介 copy 容器内指定范围的元素拷贝到另一容器中 replace 将容器内指定范围的旧元素修改为新元素 replace if 容器内指定范围满足条件的元素替换为新元素 sw
  • SC不是内部命令或外部命令

    CMD中 输入SC命令或注册odbc时 系统提示sc不是内部或外部命令 解决方法如下 右击我的电脑 点击属性 gt 高级 gt 环境变量 在弹出的新窗口下的系统变量中找到Path 点击编辑 在变量值一行最后添加以下内容 SystemRoot
  • openstack nova 命令行指令大全

    来自官方文档 nova absolute limits Print a list of absolute limits for a user actions Retrieve server actions add fixed ip Add
  • 对抗样本 - 提高机器学习模型的性能

    20200827 0 引言 今天编写文章 DGA生成与检测 论文 DeepDGA Adversarially Tuned Domain Generation and Detection 阅读 时 那篇论文最后的实验中提到了增强机器学习模型的
  • Hasura GraphQL Engine 存在远程命令执行漏洞

    文章目录 Hasura GraphQL Engine 存在远程命令执行漏洞 1 Hasura GraphQL Engine 简介 2 漏洞描述 3 影响版本 4 fofa查询语句 5 漏洞复现 6 POC EXP 7 整改意见 8 往期回顾
  • 【java学习】EasyExcel的简单使用

    EasyExcel的简单使用 前言 Excel读 1 实体类 2 读监听器与测试类 3 输出结果 Excel写 1 实体类 2 写入Excel的测试类 3 输出结果 填充Excel 1 Excel模板 2 测试类 3 输出结果 前言 Eas
  • JAVA之Thread类

    一 主线程 主线程 执行主方法的线程 main JVM执行main main 会进入到栈内存 JVM会找操作系统开辟一条main方法通向CPU的执行路径 CPu就可以通过这个路径来执行main方法 而这个路径就叫做主 main 线程 单线程
  • pptpd配置参数详解

    在LINUX下搭建PPTPD服务器主要有3个配置文件 分别如下 etc pptpd conf 主配置文件 debug 把所有的debug信息写入系统日志 var log messages option etc ppp options ppt
  • Hadoop是小象——YARN / Split&Block

    了解Hadoop架构 Hadoop可运行于一般的商用服务器上 具有高容错 高可靠性 高扩展性等特点 特别适合写一次 读多次的场景 其架构如下 HDFS 分布式文件存储 可靠性由心跳机制和冗余提供 YARN 分布式资源管理 MapReduce
  • mysql jdbcurl配置_jdbc的URL配置

    Microsoft SQL Server Microsoft SQL Server JDBC Driver 一般用来连接 SQLServer 2000 驱动程序包名 msbase jar mssqlserver jar msutil jar
  • 【金融申请评分卡】目标变量界定

    一 目标变量是什么 目标变量就是假定申请客户的好坏 逻辑回归公式里的Y 先来看下逻辑回归公式 y 11 e z y 1 1 e z
  • c++入门到精通教程 c++11/14/17-王健伟-专题视频课程

    c 入门到精通教程 c 11 14 17 528人已学习 课程介绍 本教程适合那些只有一点点c语言编程知识的新手 也适合那些c 98标准已经掌握的不错但对c 11 14 17新标准基本无所知的c 开发老手 欢迎大家尽早加入学习 请大家从授课
  • 网络流媒体(七)———RTSP

    RTSP协议介绍 RTSP协议的一些分析 一 一些字符串函数的使用 RTSP协议的一些分析 二 printf类似函数 sscanf以及log保存到内存中 printf输入重定位 1 简介 DSP产生的媒体流需要通过网络传送到客户端 如图1
  • python编程遵循哪些规律_Python实操(3):python编程规范

    选择pythoncharm作为Python开发ide也是在网上查了好长时间 这两天了解到visual studio code强大 易用 同时也一直用visual studio做c c 开发 所以决定把以后的开发平台切换到微软系 换平台以后发

随机推荐

  • 前后端分离:SpringBoot项目部署服务器操作步骤详细

    部署后端 SpringBoot到服务器 首先就是对自己项目application yaml进行配置 此处使用过多mysql8 0 spring datasource url jdbc mysql 127 0 0 1 3306 book se
  • 计算机网络笔记and题解

    上次博客就写了一点划分子网和子网掩码相关的计算 然后还要一个重要的五分类编址CIDR 也就是构造超网 无分类编址CIDR Classless Inter Domain Routing 正式名字是无分类域间路由选择 特点 1 CIDR消除了传
  • 秒级数据转化为分钟级数据sql编写

    前言 利用python读取hive 将hive中秒级数据转化为以10分钟为间隔的数据 除时间与设备id外所有字段的值求平均值 代码 连接hive 创建连接通道 并且得到连接通道的钥匙 句柄 conn connect host 地址 port
  • 存储过程解析

    使用存储过程来解决涨工资 涨工资 总裁涨1000 经理涨800 其他人涨400 伪代码 ResultSet rs select empno job from emp While rs next Int eno rs getInt empno
  • Stable diffusion加载safetensors 模型出现Exception: device privateuseone:0 is invalid

    一 问题 博主用CPU硬解 Stable diffusion sd v1 4 ckpt能跑 但换成v1 5 pruned emaonly safetensors等最新格式的模型就出现Exception device privateuseon
  • MATLAB数据可视化

    MATLAB数据可视化 二维绘图 plot命令 plot y plot x y plot x y s 常见的二维绘图常用设置选项 fplot 三维绘图 plot3 mesh 函数 绘制参数网状表面图 surf 函数 绘制三维阴影曲面图 辅助
  • 蓝桥杯:三羊献瑞(答案不唯一)

    目录 题目描述 题目分析 测试用的代码 Java 答案 因为我个人做选择题有把所有可能性列举的习惯 所以我习惯性列举一下 发现答案并不像题目里面说的 三羊献瑞是唯一的 具体看我的测试用例 Test 但是结果呢 题目描述 本题为填空题 只需要
  • 软件测试和软件开发哪个发展更好

    经常有想转IT行业的同学 在了解软件测试和软件开发之后不知道转那个岗位好 今天就系统的 从多个维度来比较软件测试与软件开发 具体包括从基本素质要求 性格要求 入职门槛 知识结构 竞争压力 职业发展 职业前景等 希望能给在选择软件测试与开发朋
  • java设计模式之抽象工厂模式

    什么是抽象工厂设计模式 抽象工厂模式是一种创建型设计模式 它提供了一种创建一系列相关或依赖对象的方法 而无需指定它们具体的类 抽象工厂模式是工厂方法模式的扩展 它使用一组相关的工厂来创建对象 而工厂方法模式只是使用一个单一的工厂 在抽象工厂
  • APP移动端测试+安装+ADB命令的介绍

    重点 app测试的内容 add命令 monkey命令 次重点 模拟器的安装 雷电 夜神 android的自带的模拟器使用 常规测试 真机测试 简单了解云测Testing 腾讯云 在职小伙伴下周演示 了解 市场有的移动端的操作系统有 1 an
  • LeetCode技巧篇(一)prefix sum 前缀和

    介绍 前缀和 prefix sum 是算法题中比较实用的一种技巧 当算法题的背景是整数型数组且出现 子数组和 或者 连续的子数组 既可以考虑使用前缀和来求解会得到不错的效果 假设给定的数组A各个元素分别为 那么我们可以得到一个前缀和数组B
  • ICCV 2023

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt 3D点云和Transformer 交流群 本文介绍我们在ICCV 2023上接收的论文 PointCLIP V2 Adapting CLIP for P
  • snull驱动环境搭建与测试分析

    Here are possible values for the network numbers Once you put these lines in etc networks you can call your networks by
  • SpringBoot/Spring Cloud常见注解(面试)

    RequestMapping 在Spring MVC 中使用 RequestMapping 来映射请求 也就是通过它来指定控制器可以处理哪些URL请求 将请求和处理请求的控制器方法关联起来 建立映射关系 这个控制器方法请求路径为http l
  • inno setup的安装及简单使用

    文章目录 安装 使用 1 添加中文安装字体 2 制作使用管理员权限启动的安装包 2 1下载安装 Resource Hacker http www angusj com resourcehacker 2 2 安装并打开ResourceHack
  • C++ ——模板 & 标准模板库STL

    C 知识基础 流操作符 类 基础 初始化和重载 类 高级 继承和多态 模板 标准模板库STL 目录 C 一 模板 1 函数模板 2 类模板 二 标准模板库STL 1 容器类 Container 2 迭代器 Iterator 3 泛型算法 总
  • PF_INET AF_INET

    在写网络程序的时候 建立TCP socket sock socket PF INET SOCK STREAM 0 然后再绑定本地地址或连接远程地址时需要初始化sockaddr in结构 其中指定address family时一般设置问AF
  • 2020-09-06

    第二章 Nginx虚拟主机和负载均衡 1 虚拟主机 虚拟主机 英语 virtual hosting 或称 共享主机 shared web hosting 又称虚拟服务器 是一种在单一主机或主机群上 实现多网域服务的方法 可以运行多个网站或服
  • 水电图wp表示什么_装修水电工入门基础知识,刚入行不懂不用急?老师傅告诉你怎么做...

    装修水电工泛指室內装饰装潢水电安装工人 作为装修水电工 不但要懂得水电安装的基本技术规范 施工顺序 验收常识 在施工中 还得与硬装部分的木工 瓦工 腻子工等工种相互配合安装 及软装部分的壁纸工 布艺工等相互协作 装修水电工是技术性要求很强的
  • 11.测试代码

    测试函数 单元测试用于核实函数的某个方面没有问题 测试用例是一组单元测试 一起核实函数各种情形下的行为都符合要求 全覆盖式测试用例包含一整套单元测试 涵盖了各种可能的函数使用方式 为函数编写测试用例 可先导入模块unittest以及要测试的