Python编程:从入门到实践第十一章读书笔记11.1测试函数

第十一章读书笔记11.2测试类

#coding:gbk

#name_function.py

def get_formatted_name(first,last):
	"""生成整洁的姓名"""
	full_name = first + ' ' + last
	return full_name.title()
	
#names.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("\nPlease give me a last name: ")
	if last == 'q':
		break
	formatted_name = get_formatted_name(first,last)
	print("\tNeatly formatted name: " + formatted_name + ".")
	

#11.1.1单元测试和测试用例

#Python标准库中的模块unittest提供了代码测试工具。
#单元测试用于核实函数的某个方面没有问题;
#测试用例是一组单元测试,这些单元测试以其核实函数在各种情形下的行为都符合要求。
#全覆盖式测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。
#对于大型项目,要实现全覆盖可能很难。
#通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖。

#11.1.2可通过的测试

#要为函数编写测试用例,可先导入摸苦啊unittest以及要测试函数再创建一个继承UnitTest.TestCase的类,并编写一系列方法对函数行为的不同方面进行测试。
#test_name_function.py
import unittest
from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):   #NameTestCase的名称即类的名称可以随便命名,但最好让它看起来与要测试的函数相关,并包含字样Test
	"""测试name_function.py"""
	
	def test_first_last_name(self):
		formatted_name = get_formatted_name('janis','joplin')
		self.assertEqual(formatted_name,'Janis Joplin')   #unittest最有用的功能之一:一个断言方法;为检查输出结果,我们调用unittest的方法assertEqual(),并向它传递formatted_name和'Janis Joplin'
		
#unittest.main()

#11.1.3不能通过的测试

#name_function.py
def get_formatted_name(first,middle,last):
	"""生成整洁的姓名"""
	full_name = first + " " + middle + " " + last
	return full_name.title()
	
#运行test_name_function.py

#11.1.4测试未通过时怎么办

#如果你检查的条件没有错,测试通过了以为着函数的行为是对的,而测试未通过意味着你编写的新代码有。
#因此,测试未通过时,不要修改测试,而修复导致测试不能通过的代码:检查刚对函数所做的修改,找出导致函数行为不符合预期的修改。

#name_function.py
def get_formatted_name(first,last,middle = ''):
	"""生成整洁的姓名"""
	if middle:
		full_name = first + " " + middle + " " + last
	else:
		full_name = first + ' ' +last
	return full_name.title()

unittest.main()


#11.1.5添加新测试

import unittest
from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):   #NameTestCase的名称即类的名称可以随便命名,但最好让它看起来与要测试的函数相关,并包含字样Test
	"""测试name_function.py"""
	
	def test_first_last_name(self):
		formatted_name = get_formatted_name('janis','joplin')
		self.assertEqual(formatted_name,'Janis Joplin')   #unittest最有用的功能之一:一个断言方法;为检查输出结果,我们调用unittest的方法assertEqual(),并向它传递formatted_name和'Janis Joplin'

	def test_first_last_middle_name_name(self):
		"""能够正确地处理像Wolfgang Amadeus Mozart这样的姓名吗?"""
		formatted_name = get_formatted_name('wolfgang','mozart','amadeus')
		self.assertEqual(formatted_name,'Wolfgang Amadeus Mozart')
		
unittest.main()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值