编写函数或类时,还可为其编写测试。通过测试,可确定代码面对各种输入都能够按要求的那样工作。
1.15.1 测试函数
name_function.py
def get_formatted_name(first,last,middle=''):
"""Generate a neatly formatted full name"""
if middle:
full_name = first + ' ' + middle + ' ' + last
else:
full_name = first + ' ' + last
return full_name.title()
def get_formatted_name(first,last,middle=”): 用于让用户输入名和姓,然后输出完整整洁的全名
我们可以针对这个函数进行测试
name
测试类
class NamesTestCase(unittest.TestCase):
""""测试name_function.py"""
def test_first_last_name(self):
formatted_name =get_formatted_name('gonathan','guo')
self.assertEqual(formatted_name,'Gonathan Guo')
def test_first_middle_last_name(self):
formatted_name=get_formatted_name('wolfgang','mozart','amadeus')
self.assertEqual(formatted_name,"Wolfgang Amadeus Mozart")
测试OK 的结果
..
Ran 2 tests in 0.000s
OK
上面输出表面,只要用户输入姓 跟 名就能准备返回整洁的全名
然后我们修改函数,看看如果不能测试通过会返回什么呢?
def get_formatted_name(first,last,middle):
full_name=first+' '+middle+' '+last
return full_name.title()
E.
======================================================================
ERROR: test_first_last_name (__main__.NamesTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/Python_Study/python_charm/pycharm_study.py", line 1235, in test_first_last_name
formatted_name =get_formatted_name('gonathan','guo')
TypeError: get_formatted_name() missing 1 required positional argument: 'middle'
测试类
前面的例程是为了测试函数,接下来我们尝试我们用的比较多的类
一个要测试的类
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_results(self):
"""""显示收集到的所有答案"""
print("Survey results:")
for response in self.responses:
print("- "+response)
为证明AnonymousSurvey类能够正确的工作,我们编写一个使用它的程序
language_survey.py
from car import 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("\n Thank you to everyone who participated in the survey!")
my_survey.show_results()
输出结果
What language did you first learn to speak?
Enter ‘q’ at any time to quit.
Language: China
Language: English
Language: Spanish
Language: Q
Language: q
Thank you to everyone who participated in the survey!
Survey results:
- China
- English
- Spanish
- Q
* 测试AnonymousSurvey类*
import unittest
from car 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)
unittest.main()
.
Ran 1 test in 0.001s
OK
收集到一个答案调差用处不大,我们提供到三个答案测试
import unittest
from car 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)
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)
self.assertIn('English',my_survey.responses)
unittest.main()
..
Ran 2 tests in 0.000s
OK