在1中,我们进行了针对单个函数的案例进行的测试,下面会编写针对类的测试。如果针对类的测试通过了,就能确信对类所做的改进没有意外地破坏其原有的行为。
案例(帮助管理匿名调查的类的测试):
要测试的类名为AnonymousSurvey
survey.py:
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 results : ")
for response in self.responses:
print('-' + response)
接下来我们来测试上面AnonymousSurvey这个类。
test_survey.py:
import unittest
from survey import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):
"""针对AnonymousSurvey类的测试"""
def setUp(self):
"""创建一个调查对象,供使用地测试方法使用"""
question = "What language did u first learn to speak?"
self.my_survey = AnonymousSurvey(question)
self.responses = ['English', 'Freach', 'Spanish']
"""
创建了一个调查对象和答案列表,存储这两样东西地列表名前包含self(即存储在属性中),因此可在这个类地任何地方使用。
这让两个测试方法都变得更简单,因为它们不用分别创建调查对象和答案
"""
def test_store_single_response(self):
"""测试单个答案会被妥善地存储"""
self.my_survey.store_response(self.responses[0])
self.asserIn(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)
unittest.main()
以上setUp方法用来创建一个调查对象和一组答案,供方法test_store_single_response和test_store_three_response使用,这亮哥方法分别是为了测试单个和三个数据是否被妥善地存储。
注意:每完成一个单元测试,Python都打印一个字符:测试通过时打印一个句点;测试引发错误时打印一个E;测试导致失败时打印一个F。