Python编程:从入门到实践(第二版)随书敲代码 第十一章 测试代码

name_function.py

def get_formatted_name(first, last, middle=''):

    """生成整洁的姓名."""

    if middle:

        full_name = f"{first} {middle} {last}"

    else:

        full_name = f"{first} {last}"

    return full_name.title()

name.py

from name_function import get_formatted_name

print("Enter 'q' at any time to quit.")

while True:

    first = input("\nPlease give me a first name: ")

    if first == 'q':

        break

    last = input("Please give me a last name: ")

    if last == 'q':

        break

    formatted_name = get_formatted_name(first, last)

    print(f"\tNeatly formatted name: {formatted_name}")

test_name_function.py

import unittest

from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):

    """测试 name_function.py."""

    def test_first_last_name(self):

        """能够正确地处理像 Janis Joplin 这样的姓名吗?"""

        formatted_name = get_formatted_name('janis', 'joplin')

        self.assertEqual(formatted_name, 'Janis Joplin')

    def test_first_last_middle_name(self):

        """能够正确地处理像 Wolfgang Amadeus Mozart 这样的姓名吗?"""

        formatted_name = get_formatted_name(

            'wolfgang', 'mozart', 'amadeus')

        self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')

if __name__ == '__main__':

    unittest.main()

city_functions.py

# 练习 11-1 城市和国家

# 编写一个函数,它接受两个形参:一个城市名和一个国家名。这个函数返回一个格式

# 为 City, Country 的字符串,如 Santiago, Chile 。将这个函数存储在一个名为 city _functions.py 的模块中。

# 创建一个名为 test_cities.py 的程序,对刚编写的函数进行测试(别忘了,你需要导入

# 模块 unittest 以及要测试的函数)。编写一个名为 test_city_country() 的方法,核实使

# 用类似于 'santiago' 和 'chile' 这样的值来调用前述函数时,得到的字符串是正确的。运

# 行 test_cities.py,确认测试 test_city_country() 通过了。

"""一系列处理城市的函数."""

def city_country(city, country):

    """返回一个形如'Santiago, Chile'的字符串."""

    return f"{city.title()}, {country.title()}"

test_cities.py

import unittest

from city_functions import city_country

class CitiesTestCase(unittest.TestCase):

    """测试city_functions.py."""

    def test_city_country(self):

        """传入简单的城市和国家可行吗?"""

        santiago_chile = city_country('santiago', 'chile')

        self.assertEqual(santiago_chile, 'Santiago, Chile')

if __name__ == '__main__':

    unittest.main()

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(f"- {response}")

language_survey.py

from survey import AnonymousSurvey

# 定义一个问题, 并创建一个调查.

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("\nThank you to everyonewho participated in the survey!")

my_survey.show_results()

test_survey.py

import unittest

from survey 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_responses(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)

if __name__ == '__main__':

    unittest.main()

test_survey1.py

import unittest

from survey import AnonymousSurvey

class TestAnonymousSurvey(unittest.TestCase):

    """针对AnonymousSurvey类的测试."""

    def setUp(self):

        """

        创建一个调查对象和一组答案,供使用的测试方法使用.

        """

        question = "What language did you first learn to speak?"

        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)

if __name__ == '__main__':

    unittest.main()

employee.py

# 练习 11-3 雇员

# 编写一个名为 Employee 的类,其方法 __init__() 接受名、姓和年薪,并将它们都存储在属性中。

# 编写一个名为 give_raise() 的方法,它默认将年薪增加 5000 美元,但也能够接受其他的年薪增加量。

# 为 Employee 编写一个测试用例,其中包含两个测试方法:test_give_default_raise()和 test_give_custom_raise() 。

# 使用方法 setUp() ,以免在每个测试方法中都创建新的雇员实例。运行这个测试用例,确认两个测试都通过了。

class Employee():

    """一个表示雇员的类."""

    def __init__(self, f_name, l_name, salary):

        """初始化雇员."""

        self.first = f_name.title()

        self.last = l_name.title()

        self.salary = salary

    def give_raise(self, amount=5000):

        self.salary += amount

test_employee.py

import unittest

from employee import Employee

class TestEmployee(unittest.TestCase):

    """测试模块employee."""

    def setUp(self):

        """创建一个Employee实例, 以便在测试中使用."""

        self.hi = Employee('hi', 'hello', 100_000)

    def test_give_default_raise(self):

        """测试使用默认的年薪增加量是否可行."""

        self.hi.give_raise()

        self.assertEqual(self.hi.salary, 105_000)

    def test_give_custom_raise(self):

        """测试自定义年薪增加量是否可行."""

        self.hi.give_raise(10_000)

        self.assertEqual(self.hi.salary, 110000)

if __name__ == '__main__':

    unittest.main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值