测试类——python编程从入门到实践
1.各种断言方法
常用断言方法:
|
方法 |
用途 |
|
assertEqual(a, b) |
核实a == b |
|
assertNotEqual(a, b) |
核实a != b |
|
assertTrue(x) |
核实x为True |
|
assertFalse(x) |
核实x为False |
|
asseertIn(item, list) |
核实item在list中 |
|
assertNotIn(item, list) |
核实item不在list中 |
2.一个要测试的类
首先编写一个类:
survey.py
class AnonymousSurvey:
"""收集匿名调查问卷的答案""" def __init__(self, question):
"""存储一个问题,并为存储答案做准备"""
self.question = question
self.responses = [] def show_quetion(self):
"""显示调查问卷"""
print(self.question) def store_response(self, new_response):
"""存储单份调查答案"""
self.responses.append(new_response) def show_result(self):
"""显示收集到的所有答卷"""
print("Survey result:")
for response in self.responses:
print('- ' + response)
为证明AnonymousSurvey类可以正确的工作,编写一个使用它的程序:
language_survey.py
from survey import AnonymousSurvey # 定义一个问题,并创建一个表示调查的AnonymousSurvey对象
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question) # 显示并存储问题的答案
my_survey.show_quetion()
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 survey!")
my_survey.show_result()
运行结果:
What language did you first learn to speak?
Enter 'q' at any time to quit. Language: English
Language: Spanish
Language: English
Language: Mandarin
Language: q Thank you to everyone who participated in survey!
Survey result:
- English
- Spanish
- English
- Mandarin
3.测试AnonymousSurvey类
对AnonymousSurvey类行为的一个方面进行验证:如果用户面对调查问题时只提供了一个答案,这个答案也能被妥善地存储。使用方法assertIn()来核实它包含在答案列表中:
test_survey.py
import unittest
from survey import AnonymousSurvey class TestAnonymousSurvey(unittest.TestCase):
"""针对AnonymousSurvey类的测试""" def test_store_single_response(self):
"""测试单个答案会被妥善地存储"""
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)
my_survey.store_response('English') self.assertIn('English', my_survey.responses) if __name__ == "__main__":
unittest.main()
运行test_survey.py时,测试通过了:
Ran 1 test in 0.010s OK
只能收集一个答案的调查用途不大。下面核实用户提供三个答案时,它们也将被妥善地存储。为此,在AnonymousSurvey中再添加一个方法:
import unittest
from survey import AnonymousSurvey class TestAnonymousSurvey(unittest.TestCase):
"""针对AnonymousSurvey类的测试""" def test_store_single_response(self):
... def test_store_three_response(self):
"""测试三个答案会被妥善地存储"""
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)
responses = ['English', 'Spanish', 'Mandarin']
for response in responses:
my_survey.store_response(response) for response in responses:
self.assertIn(response, my_survey.responses) if __name__ == "__main__":
unittest.main()
再次运行test_survey.py时,两个测试都通过了:
Ran 2 tests in 0.002s OK
这些还有些重复的地方,怎么更简洁呢?
4.方法setUp()
unittest.TestCase类包含方法setUp(),只需创建这些对象一次,并在每个测试方法中使用它们。如果在TestCase类中包含了方法setUp(),Python将先运行它,再运行各个以test_打头的方法。这样,在编写的每个测试方法中都可使用方法setUp()中创建的对象。
使用setUp()来创建一个调查对象和一组答案,供方法test_store_single_response()和test_store_three_responses()使用:
import unittest
from survey import AnonymousSurvey class TestAnonymousSurvey(unittest.TestCase):
"""针对AnonymousSurvey类的测试""" 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_response(self):
"""测试三个答案会被妥善地存储"""
for response in self.responses:
self.my_survey.store_response(response)
for response in self.responses:
self.assertIn(response, self.my_survey.responses) if __name__ == "__main__":
unittest.main()
方法setUp()做了两件事:创建一个调查对象;创建一个答案列表。存储这两样东西的变量名包含前缀self,因此可以在这个类中的任何地方使用。这个让两个测试方法都更加简单,不用创建调查对象和答案。
测试自己编写的类时,方法setUp()让测试方法编写起来更容易:可在setUp中创建一系列实例并设置它们的属性,再在测试方法中直接使用这些实例。相比于每个测试方法中都创建实例并设置其属性要容易得多。
测试类——python编程从入门到实践的更多相关文章
- Python编程从入门到实践笔记——类
Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...
- Python编程从入门到实践
Python编程从入门到实践1 起步2 变量和简单数据类型3 列表简介4 操作列表5 if语句6 字典7 用户输入和while循环8 函数9 类10 文件和异常11 测试代码12 武装飞船13 外星人 ...
- 《Python编程:从入门到实践》分享下载
书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...
- 《python编程从入门到实践》读书实践笔记(二)
本文是<python编程从入门到实践>读书实践笔记11章的内容,主要包含测试,为体现测试的重要性,独立成文. 11 测试代码 写在前面的话,以下是我这些年开发中和测试相关的血泪史. 对于一 ...
- Python编程从入门到实践笔记——if语句
Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...
- 《python编程从入门到实践》读书实践笔记(一)
本文是<python编程从入门到实践>读书实践笔记1~10章的内容,主要包含安装.基础类型.函数.类.文件读写及异常的内容. 1 起步 1.1 搭建环境 1.1.1 Python 版本选择 ...
- Python编程从入门到实践笔记——异常和存储数据
Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...
- Python编程从入门到实践笔记——文件
Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...
- Python编程从入门到实践笔记——函数
Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...
随机推荐
- on bind live delegate的区别
bind()----直接绑定在元素上 live()----通过冒泡的方式绑定到元素上,更适合于列表类型的绑定,和bind()相比,支持动态数据 delegate()----精确的小范围的适用事件代理, ...
- 第03组 Alpha冲刺
队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...
- planning algorithms chapter 3
chapter 3 几何表示和变换 P.S: 总算到了 motion planning 部分了 几何建模 几何建模主要有两类方法:边界表示法和实体表示法. 环境模型可以是二维或三维,实体主要包括障碍物 ...
- [后渗透]Windows server 80端口复用后门
0x01 简介 该后门的基本原理是使用Windows 的远程管理管理服务WinRM,组合HTTP.sys驱动自带的端口复用功能,一起实现正向的端口复用后门. 具体细节信息请参考:https://pap ...
- <每日 1 OJ> -LeetCode 7. 整数反转
题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 ...
- mysql中包含长字段索引的优化
不同于oracle,在mysql的Innodb存储引擎中,对索引的总长度有限制.在mysql 5.7中(https://dev.mysql.com/doc/refman/5.7/en/innodb-r ...
- vue动态绑定class的几种方式
对象方法 -最简单的绑定(这里的active加不加单引号都可以,以下也一样都能渲染) :class="{ 'active': isActive }" 判断是否绑定一个active ...
- mysql实现row_number()和row_number() over(partition by)
row_number() ) r, test_table t 解释:给test_table里的数据设置行号, rn是行号 row_number() over(partition by) ,@rank: ...
- jzy3D从入门到弃坑_3使用jzy3D0.9画2D散点图--多条线条
jzy3D从入门到弃坑_3 使用jzy3D0.9画2D散点图--多条线条 觉得有用的话,欢迎一起讨论相互学习~Follow Me 主要思路 将多个线条的二维数组读入Scatter对象 存入到同一个画布 ...
- JAVA中用StopWatch计算代码耗时的方法
StopWatch翻译过来的意思就是秒表,其作用也就像我们平时使用的秒一样.spring中就有提供这个工具类(org.springframework.util.StopWatch). 日常开发中,经常 ...