Python单元测试&文档测试

测试系列文章:
https://www.jianshu.com/nb/30319209

单元测试

需要引入unittest模块,并使用unittest.TestCase作为基类进行继承。

比如:已有自己的Dict类,import之后可以用以下方式验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import unittest

from mydict import Dict

class TestDict(unittest.TestCase):

def test_init(self):
d = Dict(a=1, b='test')
self.assertEquals(d.a, 1)
self.assertEquals(d.b, 'test')
self.assertTrue(isinstance(d, dict))

def test_key(self):
d = Dict()
d['key'] = 'value'
self.assertEquals(d.key, 'value')

def test_attr(self):
d = Dict()
d.key = 'value'
self.assertTrue('key' in d)
self.assertEquals(d['key'], 'value')

def test_keyerror(self):
d = Dict()
with self.assertRaises(KeyError):
value = d['empty']

def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty

之后可以用python -m unittest mydict_test来测试mydict_test文件中的所有测试内容。

在类中还可以使用setUptearDown两个类函数来指定在测试前后要执行的操作。每一个测试方法前后都会分别执行这两个函数。

文档测试

在编写注释的时候,写上类似这样的注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def abs(n):
'''
Function to get absolute value of number.

Example:

>>> abs(1)
1
>>> abs(-1)
1
>>> abs(0)
0
'''
return n if n >= 0 else (-n)

在模块被导入的时候,不会有影响;但是如果直接用python 执行该文件,就会自动进行测试,如果有错误就会显示出来,没有错误不会显示。


参考资料:
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140137128705556022982cfd844b38d050add8565dcb9000
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140137398003434356a2635da4a98b4d00670e8aadb2f000