Python之unittest

本文介绍了Python的unittest模块,包括测试类的创建、setUp()和tearDown()的使用,以及各种断言方法如assertEqual、assertTrue等。unittest还提供了处理异常、警告和日志消息的检查方法,并可通过unittest.main()自动执行测试用例。了解如何构建和执行unittest测试用例,以确保代码的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试类:必须继承unittest.TestCase(),测试方法必须以test_开头,共享setUp()和tearDown()。

  • setUp()可对所有测试方法进行初始化设置或是设置重复的代码,在每个测试方法之前执行,这个方法引发的异常会被认为是错误,而非测试失败,默认实现是不做任何事;

  • tearDown()用于在测试后进行清理收尾操作。只要setUp()成功运行,无论测试方法是否通过,就一定会执行tearDown(),这个方法引发的异常会被认为是错误,而非测试失败。默认实现是不做任何事。

在测试方法中,unintest单元测试框架提供了一整套内置的断言方法,可使用assert*()系列来判定测试结果。

基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。在这里插入图片描述
比较断言
unittest框架提供的第二种断言类型就是比较断言。

下面我们看下各种比较断言:

assertAlmostEqual (first, second, places = 7, msg = None, delta = None)

验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7

assertNotAlmostEqual (first, second, places, msg, delta)

验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7

注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta

assertGreater (first, second, msg = None)

验证first > second,否则fail

assertGreaterEqual (first, second, msg = None)

验证first ≥ second,否则fail

assertLess (first, second, msg = None)

验证first < second,否则fail

assertLessEqual (first, second, msg = None)

验证first ≤ second,否则fail

assertRegexpMatches (text, regexp, msg = None)

验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()

assertNotRegexpMatches (text, regexp, msg = None)

验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()

unittest框架提供的第三种断言类型,可以处理元组、列表、字典等更复杂的数据类型
在这里插入图片描述
还可以使用以下方法检查异常、警告和日志消息的生成:
在这里插入图片描述

assertRaises(exception, callable, *args, **kwds)/ assertRaises(exception, msg=None)

如果异常被引发,测试通过;如果另一个异常被引发,则测试为错误;如果没有异常被引发,则测试失败。

assertRaisesRegex(exception, regex, callable, *args, **kwds) /assertRaisesRegex(exception, regex, msg=None)

与assertRaises()类似,但也测试regex匹配抛出异常的字符串表示形式。regex可以是正则表达式对象,也可以是包含适合re.search()使用的正则表达式的字符串。

assertWarns(warning, callable, *args, **kwds) assertWarns(warning, msg=None)

如果警告被引发,测试通过;任何异常都是错误,如果没有警告被引发,则测试失败。

assertWarnsRegex(warning, regex, callable, *args, **kwds) assertWarnsRegex(warning, regex, msg=None)

与assertWarns()类似,但也测试regex是否匹配触发的警告的消息。regex可以是正则表达式对象,也可以是包含适合re.search()使用的正则表达式的字符串。

assertLogs(logger=None, level=None)

用于测试至少一条消息记录具有给定级别在记录器或其子节点上。
根据所测的特性测试用例被组合在一起,通过调用unittest.main(),unittest测试框架会自动收集所有模块的测试用例然后执行。
Eg:

import unittest

class StrTestCase(unittest.TestCase):
    def setUp(self):
        print("StrsetUp()")

    def test_up(self):
        print("test_up")

    def tearDown(self):
        print("Str tearDown()")

class FuncTestCase(unittest.TestCase):
    def setUp(self):
        print("FuncTestCase setUp()")

    def test_func(self):
        print("test_func")

    def tearDown(self):
        print("FuncTestCase tearDown()")


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

如果想自己构建用例集,eg如下

import unittest

class StrTestCase(unittest.TestCase):
    def setUp(self):
        print("StrsetUp()")

    def test_up(self):
        print("test_up")

    def tearDown(self):
        print("Str tearDown()")

class FuncTestCase(unittest.TestCase):
    def setUp(self):
        print("FuncTestCase setUp()")

    def test_func(self):
        print("test_func")

    def tearDown(self):
        print("FuncTestCase tearDown()")

def suite():
    suite = unittest.TestSuite()
    suite.addTest(FuncTestCase('test_func'))
    return suite

if __name__ == '__main__':
    runner=unittest.TextTestRunner()
    runner.run(suite())

python unittest的API:https://docs.python.org/2.7/library/unittest.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值