你将学习一下内容:
- 如何使用模块中unittest中工具来为函数和类编写测试;
- 如何编写继承unitTest.TestCase的类,以及如何编写测试方法,已核实函数和类的行为符合预期;
- 如何使用setUp()来根据类高效地创建实例并设置其属性,以便在类的测试方法中都可以使用它们;
案例demo1
案例说明:根据输入的性与名,返回输出性+名的结果
name_function.py
def get_formatted_name(first,last):
"""生成整洁的姓名"""
full_name = first+" "+ last
return full_name.title()
编写测试文件tests.py
from django.test import TestCase
import unittest
from mysite.polls.survey import AnonymousSurvey
from mysite.polls.name_function import get_formatted_name
# Create your tests here.
class TestNameCase(unittest.TestCase):
def test_get_formatted_name(self):
"""测试get_formatted_name"""
format_name = get_formatted_name('san','zhang')
self.assertEqual('San Zhang',format_name)
#注意下面这行代码,不写会报错哦~~~书中没有这行
if __name__=="__main__":
unittest.main()
案例demo2
案例说明:调查文件的场景,根据survey(问卷)存储并打印问卷的答案response
1.定义一个你们文件类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)
2.采用原始方式对survey.py函数进行测试
language_survey.py
from mysite.polls.survey import AnonymousSurvey
def ok():
# 定义一个问题,并创建一个表示调查的AnonmousSurvey
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("\n Thank you to enveyone who participated in the survey.")
my_survey.show_results()
if __name__ =="__main__":
ok()
3.使用unittest进行测试
test.py
from django.test import TestCase
import unittest
from mysite.polls.survey import AnonymousSurvey
from mysite.polls.name_function import get_formatted_name
# Create your tests here.
class TestAnonymousSurvey(unittest.TestCase):
def setUp(self) -> None:
"""创建一个调查对象和一组调查答案,供测试方法使用"""
question = "What language did you first learn to speak?"
self.my_survey = AnonymousSurvey(question)
self.responses = ['chinaese','english','spanish']
"""针对AnonymousSurvy类的测试"""
def test_store_response(self):
"""测试单个答案会被妥善的存储"""
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)
my_survey.store_response("Chinaese")
self.assertIn('Chinaese',my_survey.responses)
def test_get_formatted_name(self):
"""测试get_formatted_name"""
format_name = get_formatted_name('san','zhang')
self.assertEqual('San Zhang',format_name)
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):
"""测试3个答案都被妥善的存储"""
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()