测试函数
用于检测编写的函数是否实现了相应的功能
Python提供了一种自动测试函数输出的 高效方式。
Python标准库中的模块unittest 提供了代码测试工具。
单元测试 用于核实函数的 某个方面没有问题。测试用例 是一组单元测试,它们一道核实函数在各种情形下的 行为都符合要求。
良好的测试用例考虑到了函数可能收到的各种输入,包含针对所 有这些情形的测试。全覆盖 的测试用例包含一整套单元测试,涵盖了各种可能的函 数使用方式。
对于大型项目,要进行全覆盖测试可能很难。通常,最初只要针对代 码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖。
测试步骤:
1.导入模块unittest 以及 需要进行测试的函数function() -以get_formatted_name为例
import unittest
from test1 import get_formatted_name
2.编写测试类
class NamesTestCase(unittest.TestCase):
"""测试name_function.py。"""
def test_first_last_name(self):
#方法必须以"test_"开头
"""能够正确地处理像Yu Lin这样的姓名吗?"""
formatted_name = get_formatted_name('Yu', 'Lin')
self.assertEqual(formatted_name, 'Yu Lin')
def test_XXXXX(self):
#方法必须以"test_"开头
"""能够正确地处理XXXXXXXX吗?"""
XXXXXXXX
if __name__ == '__main__':
unittest.main()
#if 代码块检查特殊变量__name__ ,这个变量是在程序执行时设置的。如果这个文件作为主程序执行,变量__name__ 将被设置为'__main__' 。在这里,调用unittest.main() 来运行测试用例。如果这个文件被测试框架导入,变量__name__ 的值将不是'__main__' ,因此不会调用unittest.main() 。
要点:
-
这个类的作用是用于包含一系列针对 get_formatted_name() 的单元测试。这个类可以随意命名,但最好让它看起来 与要测试的函数相关并包含Test 字样。如NamesTestCase()的类名
-
这个类必须继承unittest.TestCase 类,这样Python才知道如何运行你编写的测试。
-
NamesTestCase 只包含一个方法,用于测试get_formatted_name() 的一个方面。方法的名字命令可以更加详细如:test_first_last_name()
-
self.assertEqual是unittest 类最有用的功能之一:断言 方法。断言方法核实得到的 结果是否与期望的结果一致
-
通过不断编写调试方法来完成其他测试
输出结果如下
.
-------------------------------------------
Ran 1 test in 0.000s
OK
断言方法
Python在unittest.TestCase 类中提供了很多断言方法
方法 | 用途 |
---|---|
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 中 |