python单元测试mock_Python单元测试(unittest+mock+tox)

本文介绍了Python单元测试的概念,通过unittest库展示了如何编写和运行单元测试,包括setUp()和tearDown()方法,以及各种assert方法。此外,文章还讲解了mock库的使用,如MagicMock,以及如何通过mock处理测试依赖。最后,文章介绍了tox工具的使用,用于在不同Python环境中管理和运行测试。
摘要由CSDN通过智能技术生成

单元测试

什么是单元

单元测试(unit testing),是指对软件中的最小可测试单元(一个模块、一个函数或者一个类)进行检查和验证。

test.jpg

示例

比如对函数abs(),我们可以编写出以下几个测试用例:

输入正数,比如1、1.2、0.99,期待返回值与输入相同;

输入负数,比如-1、-1.2、-0.99,期待返回值与输入相反;

输入0,期待返回0;

输入非数值类型,比如None、[]、{},期待抛出TypeError。

把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。

做什么

如果单元测试通过,说明我们测试的这个函数能够正常工作。如果单元测试不通过,要么函数有bug,要么测试条件输入不正确,总之,需要修复使单元测试能够通过。

意义

如果我们对abs()函数代码做了修改,只需要再跑一遍单元测试,如果通过,说明我们的修改不会对abs()函数原有的行为造成影响,如果测试不通过,说明我们的修改与原有行为不一致,要么修改代码,要么修改测试。

这种以测试为驱动的开发模式最大的好处就是确保一个程序模块的行为符合我们设计的测试用例。在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。

编写Python单元测试

unittest库使用示例

import unittest

class TestStringMethods(unittest.TestCase):

#每个测试类继承于unittest.TestCase类

def setUp(self):

print 'setUp...'

#每个testXXX函数运行前会先运行setUp函数

def tearDown(self):

print 'tearDown...'

#每个testXXX函数运行后会运行tearDown函数

#每个测试函数必须以test开头,否则不会被当成测试函数

def test_upper(self):

self.assertEqual('foo'.upper(), 'FOO')

def test_isupper(self):

self.assertTrue('FOO'.isupper())

self.assertFalse('Foo'.isupper())

def test_split(self):

s = 'hello world'

self.assertEqual(s.split(), ['hello', 'world'])

# check that s.split fails when the separator is not a string

with self.assertRaises(TypeError):

s.split(2)

#使本py文件可以直接$ python test.py执行测试

if __name__ == '__main__':

unittest.main()

setUp()和tearDown()方法

这两个方法会分别在每调用一个测试方法的前后分别被执行。设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码:

class TestDict(unittest.TestCase):

def setUp(self):

print 'setUp...'

def tearDown(self):

print 'tearDown...'

unitest.skip装饰器

可以使用unitest.skip装饰器族跳过test method或者test class,这些装饰器包括:

① @unittest.skip(reason):无条件跳过测试,reason描述为什么跳过测试

② @unittest.skipif(conditition,reason):condititon为true时跳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值