我的python学习之路----单元测试

unittest----单元测试框架
Python单元测试框架,有时称为"PyUnit",它是JUnit的Python语言版本,由Kent Beck 和 Erich Gamma创建。


unittest支持测试自动化,为多个测试用例共享设置和关闭代码,将多个测试用例聚合为一个集合,测试独立于报告框架。
test fixture
代表执行一个或多个测试需要的准备工作,或者任何的清理工作。可能包含创建临时数据库,目录或者启动服务器进程


test case
最小的测试单元,它检查对于特定输入的反应。unittest提供基类,用于创建一个新的测试用例。


test suite
测试用例、测试suites的集合,用于聚合多个测试用例一起执行。


test runner
执行测试交提供输出。


基础实例:
unittest模块提供丰富工具集用于构造和运行测试。
下面是一个random模块三个函数的测试脚本:
import random
import unittest

class TestSequenceFunctions(unittest.TestCase):

    def setUp(self):
        self.seq = list(range(10))

    def test_shuffle(self):
        # make sure the shuffled sequence does not lose any elements
        random.shuffle(self.seq)
        self.seq.sort()
        self.assertEqual(self.seq, list(range(10)))

        # should raise an exception for an immutable sequence
        self.assertRaises(TypeError, random.shuffle, (1,2,3))

    def test_choice(self):
        element = random.choice(self.seq)
        self.assertTrue(element in self.seq)

    def test_sample(self):
        with self.assertRaises(ValueError):
            random.sample(self.seq, 20)
        for element in random.sample(self.seq, 5):
            self.assertTrue(element in self.seq)

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

测试用例是unittest.TestCase子类。random的三个方法由三个以test开头的方法单独测试。此种命名惯例告诉测试执行者哪些方法
代表tests。
各个测试的关键是调用assertEqual()来检查期望的结果,assertTrue()来确认条件,assertRaises()检查预期的异常是否发生。
这些方法取代assert语句以便test runner收集所有测试结果并产生报告。


如果setup()方法定义,则它将在各个测试之前运行。与此相似,tearDown()会在各个测试之后运行。此例中,setup()创建了一个序列。


最后一个语句块展示了一种简单的方式来运行tests。unittest.main()提供一个命令行接口来运行测试脚本。当从命令行运行时,上面的脚本
输出如下:
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK


除了unittest.main(),有其它的方法来运行tests,控制级别更加优秀,而且不需要从命令行运行。例如:
最后两行改成如下语句:
suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
unittest.TextTestRunner(verbosity=2).run(suite)

输出:
test_choice (__main__.TestSequenceFunctions) ... ok
test_sample (__main__.TestSequenceFunctions) ... ok
test_shuffle (__main__.TestSequenceFunctions) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.110s

OK


上面的实例能够满足多数测试需求。


25.3.2命令行接口
unittest能够从命令行来运行测试模块、类或者方法:
python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
测试模块能够通过文件路径指定:
python -m unittest tests/test_something.py


参考:

http://docs.python.org/py3k/library/unittest.html?highlight=unittest#unittest

https://www.ibm.com/developerworks/cn/linux/l-pyunit/


参数 :

--verbosity 意思是说输出的信息详细程度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值