unittest 基本示例

2022-08-01 14:32 更新

unittest 模块提供了一组丰富的工具,用于构造和运行测试。本节演示了一小部分工具足以满足大多数用户的需求。

下面是一个测试三个字符串方法(这三个方法分别为upper方法,isupper和split()方法)的简短脚本:

import unittest

class TestStringMethods(unittest.TestCase):
    #测试upper方法,测试字符串'foo'使用upper方法后是否返回'FOO'
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    #测试isupper方法,测试字符串'FOO'使用isupper方法后是否返回true,测试字符串'Foo'使用isupper后是否返回false
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())
    
    #测试split方法,测试字符串s能不能被正常的分割为两个字符串(存在列表中)
    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # 当分隔符不是字符串时,检查 s.split 是否失败
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()

测试用例是通过继承 unittest.TestCase 来创建的。这三个单独的测试是用名称以字母 ​test ​开头的方法定义的。此命名约定告知测试运行程序哪些方法代表测试。

每个测试的关键是调用 assertEqual() 以检查预期结果; assertTrue() assertFalse() 验证条件;或 assertRaises() 以验证是否引发了特定异常。这些方法用于代替 assert 语句,因此测试运行者可以累积所有测试结果并生成报告。

setUp() tearDown() 方法允许您定义将在每个测试方法之前和之后执行的指令。它们在组织测试代码部分中有更详细的介绍。

最后一个块显示了一种运行测试的简单方法。 unittest.main() 为测试脚本提供了一个命令行界面。从命令行运行时,上面的脚本会生成如下所示的输出:

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

 假设上述代码保存在一个叫test.py的文件中,那么运行该代码为​python -m unittest test.py

将​-v​选项传递给测试脚本将指示 unittest.main() 启用更高级别的详细程度,并生成以下输出:

test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK

 传递-v选项是在命令行中传递的,

 假设上述代码保存在一个叫test.py的文件中,那么运行该代码为​python -m unittest -v test.py

上面的例子显示了unittest最常用的功能,这些功能足以满足许多日常测试需求。本文档的其余部分从第一原则开始探讨完整的功能集。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号