第九章 测试代码

引言

  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语言程序设计,北京理工大学 嵩天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值