Python学习笔记hello_python_world11

本文记录是自己这个小菜鸡Python学习笔记
《Python编程从入门到实践》第十章

#第11章 测试代码



#11.1 测试函数
'''
name_function.py

def get_formatted_name(first, last): 
	"""Generate a neatly formatted full name.""" 
	full_name = first + ' ' + last 
	return full_name.title() 
'''

'''
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("\tNeatly formatted name: " + formatted_name + '.') 
'''


'''
Enter 'q' at any time to quit. 

Please give me a first name: janis 
Please give me a last name: joplin 
	Neatly formatted name: Janis Joplin. 

Please give me a first name: bob 
Please give me a last name: dylan 
	Neatly formatted name: Bob Dylan. 

Please give me a first name: q
'''

#单元测试和测试用例

'''
Python标准库中的模块unittest提供了代码测试工具


'''

#可通过的测试
'''
要为函数编写测试用例,可先导入模块unittest以及要测试的函数,
再创建一个继承unittest.TestCase的类,
并编写一系列方法对函数行为的不同方面进行测试
'''

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

unittest.main()
'''


'''
我们创建了一个名为NamesTestCase的类,用于包含一系列针对get_formatted_name()的单元测试。
你可随便给这个类命名,但最好让它看起来与要测试的函数相关,并包含字样Test。
这个类必须继承unittest.TestCase类,这样Python才知道如何运行你编写的测试

NamesTestCase只包含一个方法,用于测试get_formatted_name()的一个方面。
我们将这个方法命名为test_first_last_name(),因为我们要核实的是只有名和姓的姓名能否被正确地格式化。
我们运行test_name_function.py时,所有以test_打头的方法都将自动运行。
在这个方法中,我们调用了要测试的函数,并存储了要测试的返回值

我们使用了unittest类最有用的功能之一:一个断言方法。
断言方法用来核实得到的结果是否与期望的结果一致。
在这里,我们知道get_formatted_name()应返回这样的姓名,
即名和姓的首字母为大写,且它们之间有一个空格,因此我们期望formatted_name的值为Janis Joplin。
为检查是否确实如此,我们调用unittest的方法assertEqual(),并向它传递formatted_ name和'Janis Joplin'。
代码行self.assertEqual(formatted_name, 'Janis Joplin')的意思是说:
“将formatted_name的值同字符串'Janis Joplin'进行比较,如果它们相等,就万事大吉,如果它
们不相等,跟我说一声!”
'''

'''
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.000s 
OK 
'''


#不能通过的测试
'''
import unittest 
from name_function2 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') 

unittest.main()
'''

#测试未通过时怎么办
'''
import unittest 
from name_function3 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') 

unittest.main()
'''

'''
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
'''


#添加新测试
'''
import unittest 
from name_function3 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') 

unittest.main() 
'''

'''
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

'''


#11.2 测试类

#各种断言方法
'''
Python在unittest.TestCase类中提供了很多断言方法。
前面说过,断言方法检查你认为应该满足的条件是否确实满足。
如果该条件确实满足,你对程序行为的假设就得到了确认,你就可以确信其中没有错误。
如果你认为应该满足的条件实际上并不满足,Python将引发异常。

方 法 							用 途
assertEqual(a, b) 			核实a == b
assertNotEqual(a, b) 		核实a != b
assertTrue(x) 				核实x为True
assertFalse(x) 				核实x为False
assertIn(item, list) 		核实item在list中
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("Survey results:") 
		for response in self.responses: 
			print('- ' + response) 

'''

'''
from survey import AnonymousSurvey 

#定义一个问题,并创建一个表示调查的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 everyone who participated in the survey!") 
my_survey.show_results() 
'''

'''
what language did you first learn to speak? 
Enter 'q' at any time to quit. 
Language: English 
Language: Spanish
Language: English 
Language: Mandarin 
Language: q 
Thank you to everyone who participated in the survey! 
Survey results: 
- English 
- Spanish 
- English 
- Mandarin 
'''


#测试AnonymousSurvey类
'''
import unittest 
from survey import AnonymousSurvey 

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

unittest.main() 
'''


'''
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
'''

'''
import unittest 
from survey import AnonymousSurvey 

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

unittest.main() 
'''

'''
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
'''

#方法 setUp()
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) 

unittest.main()

'''
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值