单元测试:
工程中需要用到一个功能,
通过代码实现了一个函数,用来完成这个功能。
需要对该功能的输入输出的各种情况,进行各种测试,以确保代码的健壮性
需要多方位,多角度的测试。
1 参考网页
单元测试
用unittest就好
测试参考代码
mydict.py ----- 需要被单元测试的代码
class Dict(dict):
def __init__(self, **kw):
super(Dict, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
def __setattr__(self, key, value):
self[key] = value
mydict_test.py ----- 测试代码 ---- 单独的文件 ---- 引用被测试函数,进行多方位测试
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
if __name__ == '__main__':
unittest.main()
执行结果:
.....
----------------------------------------------------------------------
Ran 5 tests in 0.000s
OK
另外一个形式:
##import unittest
from unittest import TestCase,main
from mydict import Dict
class TestDict(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
def runTest(self):
self.test_init()
self.test_attr()
if __name__ == '__main__':
TestDict().debug()
需要测试的函数,放入 def runTest(self): 中
补充研究:
# coding: utf-8
import os, sys
from collections import namedtuple
from unittest import TestCase, main
from unittest.mock import MagicMock, patch