Python程式設計從入門到實踐課後答案:第十一章
11-1 城市和國家 :編寫一個函式,它接受兩個形參:一個城市名和一個國家名。這個函式返回一個格式為City, Country 的字串,如Santiago, Chile 。將
這個函式儲存在一個名為city_functions.py的模組中。
建立一個名為test_cities.py的程式,對剛編寫的函式進行測試(別忘了,你需要匯入模組unittest 以及要測試的函式)。編寫一個名為test_city_country() 的
方法,核實使用類似於’santiago’ 和’chile’ 這樣的值來呼叫前述函式時,得到的字串是正確的。執行test_cities.py ,確認測
試test_city_country() 通過了。
import unittest
def city_functions(city, country):
return city + ', ' + country
class CityTestCase(unittest.TestCase):
def test_city_country(self):
self.assertEqual(city_functions("杭州", "中國"), "杭州, 中國")
if __name__ == '__main__':
unittest.main()
11-2 人口數量 :修改前面的函式,使其包含第三個必不可少的形參population ,並返回一個格式為City, Country - population xxx 的字串,
如Santiago, Chile - population 5000000 。執行test_cities.py,確認測試test_city_country() 未通過。
修改上述函式,將形參population 設定為可選的。再次執行test_cities.py,確認測試test_city_country() 又通過了。
再編寫一個名為test_city_country_population() 的測試,核實可以使用類似於’santiago’ 、‘chile’ 和’population=5000000’ 這樣的值來呼叫
這個函式。再次執行test_cities.py,確認測試test_city_country_population() 通過了。
import unittest # 如Santiago, Chile - population 5000000 。執行test_cities.py,確認測試test_city_country() 未通過。 def city_function(city, country, population): return "%s,%s - population %d" % (city, country, population) # 修改上述函式,將形參population 設定為可選的。再次執行test_cities.py,確認測試test_city_country() 又通過了。 def city_functions1(city, country, population=50): return "%s,%s - population %d" % (city, country, population) class CityTestCase(unittest.TestCase): # 如Santiago, Chile - population 5000000 。執行test_cities.py,確認測試test_city_country() 未通過。 def test_city_country(self): self.assertEqual(city_function("杭州", "中國", 5000), "杭州, 中國") # 修改上述函式,將形參population 設定為可選的。再次執行test_cities.py,確認測試test_city_country() 又通過了。 def test_city_country1(self): self.assertEqual(city_functions1("杭州", "中國"), "杭州,中國 - population 50") # 再編寫一個名為test_city_country_population() 的測試,核實可以使用類似於'santiago' 、'chile' 和'population=5000000' 這樣的值來呼叫 # 這個函式。再次執行test_cities.py,確認測試test_city_country_population() 通過了。 def test_city_country_population(self): self.assertEqual(city_functions1("杭州", "中國", population=5000), "杭州,中國 - population 5000") if __name__ == '__main__': unittest.main()
11-3 僱員 :編寫一個名為Employee 的類,其方法__init__() 接受名、姓和年薪,並將它們都儲存在屬性中。編寫一個名為give_raise() 的方法,它預設將
年薪增加5000美元,但也能夠接受其他的年薪增加量。
為Employee 編寫一個測試用例,其中包含兩個測試方法:test_give_default_raise() 和test_give_custom_raise() 。使用方法setUp() ,以免在
每個測試方法中都建立新的僱員例項。執行這個測試用例,確認兩個測試都通過了。
import unittest
class Employee:
def __init__(self, name, age, money):
self.name = name
self.age = age
self.money = money
def give_raise(self, add=5000):
self.money += add
return self.money
class TestEmployee(unittest.TestCase):
def setUp(self):
self.my_employee = Employee("鄭超", "23", 5000)
def test_give_default_raise(self):
self.my_employee.give_raise()
self.assertEqual(10000, self.my_employee.money)
def test_give_custom_raise(self):
self.my_employee.give_raise(10000)
self.assertEqual(15000, self.my_employee.money)
if __name__ == '__main__':
unittest.main()