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编程从入门到实践的更多相关文章

  1. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

  2. Python编程从入门到实践

    Python编程从入门到实践1 起步2 变量和简单数据类型3 列表简介4 操作列表5 if语句6 字典7 用户输入和while循环8 函数9 类10 文件和异常11 测试代码12 武装飞船13 外星人 ...

  3. 《Python编程:从入门到实践》分享下载

    书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...

  4. 《python编程从入门到实践》读书实践笔记(二)

    本文是<python编程从入门到实践>读书实践笔记11章的内容,主要包含测试,为体现测试的重要性,独立成文. 11 测试代码 写在前面的话,以下是我这些年开发中和测试相关的血泪史. 对于一 ...

  5. Python编程从入门到实践笔记——if语句

    Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...

  6. 《python编程从入门到实践》读书实践笔记(一)

    本文是<python编程从入门到实践>读书实践笔记1~10章的内容,主要包含安装.基础类型.函数.类.文件读写及异常的内容. 1 起步 1.1 搭建环境 1.1.1 Python 版本选择 ...

  7. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

  8. Python编程从入门到实践笔记——文件

    Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...

  9. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

随机推荐

  1. Numpy | 15 数学函数

    NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等. 三角函数 NumPy 提供了标准的三角函数:sin().cos().tan(). import numpy a ...

  2. Numpy | 01 简介

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...

  3. 关于STM32 Flash的一些问题

    注:本人感觉是STM32 Flash本身的问题. 最近做STM32的远程升级,保存到Flash里面,用于记录更新状态的信息总是无故的清理掉 最终测试发现 STM32的 Flash 擦除操作 并不一定会 ...

  4. DIP大作业---图像分割

    数字图像处理课程的大作业,要求如下: 图像分割就是把图像分成若干个特定的.具有独特性质的区域并提出感兴趣目标的技术和过程.它是由图像处理到图像分析的关键步骤.现有的图像分割方法主要分以下几类:基于阈值 ...

  5. x64下进程保护HOOK

    目录 x64(32)下的进程保护回调. 一丶进程保护线程保护 1.简介以及原理 1.2 代码 1.3注意的问题 二丶丶回调函数写法 2.1 遇到的问题. 2.2 回调代码 x64(32)下的进程保护回 ...

  6. BDD的概念

    BDD的概念Behavior-Driven Development (BDD) is a set of software engineering practices designed to help ...

  7. join的用法

    var array = ['周欢', '周圆圈'] var str = array.join(' ') console.log(str) // 周欢 周圆圈 join()的括号里面的表示的是分隔符号

  8. 查看Linux机器的外网IP

    curl icanhazip.comcurl ifconfig.mecurl curlmyip.comcurl ip.appspot.comcurl ipinfo.io/ipcurl ipecho.n ...

  9. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...

  10. kafka(五) 流式处理 kafka stream

    参考文档: http://www.infoq.com/cn/articles/kafka-analysis-part-7?utm_source=infoq&utm_campaign=user_ ...