1、测试函数

name_function.py

  1. def get_formatted_name(first, last):
  2. """生成整洁的姓名"""
  3. full_name = first + ' + last
  4. return full_name.title()

names.py

  1. from name_function import get_formatted_name as gt
  2. print("在任何时候输入 q 进行退出。")
  3. while True:
  4. first = input("\n请输入一个first name: ")
  5. if first == 'q':
  6. break
  7. last = input("请输入一个last name:")
  8. if last == 'q':
  9. break
  10. formatted_name = gt(first, last)
  11. print("\n整洁的名字是:" + formatted_name + '.')

test_name_function.py测试函数

  1. import unittest
  2. from name_function import get_formatted_name
  3. class NamesTestCase(unittest.TestCase):
  4. """测试'name_function.py'"""
  5. #注意!方法名必须以test_打头,这样才会自动运行!
  6. def test_first_last_name(self):#这个测试会通过
  7. formatted_name = get_formatted_name('janis', 'joplin')
  8. self.assertEqual(formatted_name, 'Janis Joplin')#将formatted_name与右值相比,一样则通过
  9. def test_first_last_middle_name(self):#这个测试会失败
  10. formatted_name = get_formatted_name(
  11. 'wolfgang', 'mozart', 'amadeus')
  12. self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')
  13. unittest.main()

由于第二个测试函数多了一个参数导致测试未通过,我们可以将name_function改为这样:

  1. def get_formatted_name(first, last, middle=''): #设置一个middle默认值参数
  2. """Generate a neatly-formatted full name."""
  3. if middle:
  4. full_name = first + ' ' + middle + ' ' + last
  5. else:
  6. full_name = first + ' ' + last
  7. return full_name.title()

即可解决。


2、测试类

  • 各种断言方法:
    1. assertEqual(a,b) 核实 a==b
    2. assertNotEqual(a,b) 核实 a!=b
    3. assertTrue(x) 核实x为真
    4. assertFalse(x) 核实x为假
    5. assertIn(item,list) 核实itemlist
    6. assertNotIn(item,list) 核实item不在list

一个要测试的类:survey.py

  1. class AnonymousSurvey():
  2. """收集匿名调查问卷的答案"""
  3. def __init__(self, question):
  4. """存储一个问题,并为存储答案做准备"""
  5. self.question = question
  6. self.responses = []
  7. def show_question(self):
  8. """显示调查问卷"""
  9. print(self.question)
  10. def store_response(self, new_response):
  11. """存储单份调查答案"""
  12. self.responses.append(new_response)
  13. def show_results(self):
  14. """显示所有收集到的答案"""
  15. print("调查结果:")
  16. for response in self.responses:
  17. print('- ' + response)

调用代码:language_survey.py

  1. from survey import AnonymousSurvey
  2. # 定义一个问题,并创建一个表示调查的AnonymousSurvey对象
  3. question = "你母语学的啥语言?"
  4. my_survey = AnonymousSurvey(question)
  5. # 显示问题并存储答案
  6. my_survey.show_question()
  7. print("输入 q 退出。\n")
  8. while True:
  9. response = input("Language: ")
  10. if response == 'q':
  11. break
  12. my_survey.store_response(response)
  13. # 显示调查结果
  14. print("\n感谢参加的所有人!")
  15. my_survey.show_results()

使用setUp函数的测试代码:test_survey.py

  1. import unittest
  2. from survey import AnonymousSurvey
  3. class TestAnonymousSurvey(unittest.TestCase):
  4. """测试 AnonymousSurvey 类"""
  5. def setUp(self): #优先test_打头的函数运行
  6. """
  7. 创建一个调查对象和一组答案,供使用的测试方法使用
  8. """
  9. question = "你母语学的啥语言?"
  10. self.my_survey = AnonymousSurvey(question)#创建一个调查对象
  11. self.responses = ['English', 'Spanish', 'Mandarin']#创建一个答案列表
  12. def test_store_single_response(self):
  13. """测试单个答案会被妥善存储"""
  14. self.my_survey.store_response(self.responses[0])
  15. self.assertIn(self.responses[0], self.my_survey.responses)
  16. def test_store_three_responses(self):
  17. """测试三个答案会被妥善存储"""
  18. for response in self.responses:
  19. self.my_survey.store_response(response)
  20. for response in self.responses:
  21. self.assertIn(response, self.my_survey.responses)
  22. unittest.main()

3、最后:

  1. 测试通过:打印一个句点
  2. 引发错误:打印一个 E
  3. 断言失败:打印一个 F