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()