您现在的位置是:首页 >其他 >第九章 测试代码网站首页其他

第九章 测试代码

沉远 2024-06-17 10:22:08
简介第九章 测试代码

引言

  1. 码字不易,如果这篇文章对您有帮助的话,希望您能点赞、收藏、加关注!您的鼓励就是我前进的动力!

一、测试

  1. Python标准库中模块unittest提供了代码测试工具。
  2. 单元测试:用于核实函数的某方面没有问题。
  3. 测试用例:是一组单元测试,他们一起核实函数在各种情况下的行为都符合要求。
  4. 良好的测试用例,考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。
  5. 全覆盖:全覆盖的测试用例包含一套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要进行全覆盖测试可能很难。通常最初只要针对代码的重要行为编写测试即可。等项目被广泛使用时,再考虑全覆盖。
  6. unittest类最有用的功能之一:断言方法。

二、实例

  1. unittest.TestCase类包含方法 setUp() 让我们只需创建这些对象一次,就能在每个测试方法中使用。
  2. 方法 assertEqual() 比较传入其内的两个参数,如果它们相等,就通过测试,如果它们不等,则给出相应的反馈。
  3. 方法名必须以test打头,这样它才会在我们运行测试模块时自动运行。
  4. if 代码块检查特殊变量__name__,这个变量是在程序执行时设置的。如果这个文件作为主程序执行,变量__name__将被设置为__main__。在这里调用unittest.main来运行测试用例。如果这个文件被测试框架导入变量__name__的值将不再是__mian__,因此不会调用unittest.main。
import unittest
from book import Book

class TestBook(unittest.TestCase):
	"""对Book类的测试"""
	
	def setUp(self):
		"""创建测试用的对象"""
		self.book1=Book('平凡的世界',105) #将Book类的实例用作TestBook类的属性
		self.number=[2134,3123,9999]

	def test_change_num(self):
		"""测试修改图书编号为不同的值均能成功"""
		for num in self.number:
			self.book1.change_num(num)
			self.assertEqual(num,self.book1.number)
		
if __name__=='__main__':
	unittest.main()		

三、测试结果

  1. 运行测试用例时,每完成一个单元测试,python都打印一个字符:测试通过时,打印一个句点,测试引发错误时打印一个E,测试导致断言失败时打印一个F。
  2. 测试通过,意味着函数的行为是对的,测试未通过意味着编写的新代码有错误。测试未通过时,不要修改测试,而应修复导致测试不能通过的代码。
#成功输出:
# .
# -------------------------------------------------------------------
# Ran 1 test in 0.000s

# OK

#失败输出:
# F
# ====================================================================
# FAIL: test_change_num (__main__.TestBook)
# 测试修改图书编号为不同的值均能成功
# --------------------------------------------------------------------
# Traceback (most recent call last):
#   File "D:/PythonExp/PythonExp1/T1.py", line 17, in test_change_num
#     self.assertEqual(num, self.book1.number)
# AssertionError: 2134 != 0

# --------------------------------------------------------------------
# Ran 1 test in 0.000s

# FAILED (failures=1)

四、各种断言方法

方法用途
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中

参考资料:
[1] Eric Matthes. Python编程从入门到实践. 北京:人民邮电出版社, 2020.
[2]嵩天,礼欣,黄天羽. Python语言程序设计基础(第二版). 北京:高等教育出版社, 2017.
[3]Python语言程序设计,北京理工大学 嵩天

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。