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

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("调查结果:")
        for response in self.responses:
            print('- ' + response)

调用代码:language_survey.py

from survey import AnonymousSurvey

# 定义一个问题,并创建一个表示调查的AnonymousSurvey对象
question = "你母语学的啥语言?"
my_survey = AnonymousSurvey(question)

# 显示问题并存储答案
my_survey.show_question()
print("输入 q 退出。\n")
while True:
    response = input("Language: ")
    if response == 'q':
        break
    my_survey.store_response(response)

# 显示调查结果
print("\n感谢参加的所有人!")
my_survey.show_results()

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

import unittest
from survey import AnonymousSurvey

class TestAnonymousSurvey(unittest.TestCase):
    """测试 AnonymousSurvey 类"""

    def setUp(self): #优先test_打头的函数运行
        """
        创建一个调查对象和一组答案,供使用的测试方法使用
        """
        question = "你母语学的啥语言?"
        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_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()

3、最后:

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