该文章是对自己写的简单代码进行单元测试
1、新建一个math_method.py作为单元测试的代码文件,写入以下代码:
class MathMethod:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a+self.b
def multi(self):
return self.a*self.b
下面先介绍一下 TestCase,TestSuite ,TestLoader,Assert断言,TextTestRunner
做单元测试和功能测试的步骤是一样的。
1 写用例 TestCase
2 执行用例TestSuite 存储用例, TestLoader 找用例,加载用例,存到1的TestSuite---(注意TestSuite,TestLoader都是类)
3 对比实际结果 期望结果 判定用例是否通过 Assert断言
4 出具测试报告 TextTestRunner
2、新建一个test_math.py编写用例类:
import unittest
from class_0521.math_method import MathMethod
# 写一个测试类测试我们自己写的MathMethod模块里面的类,进行单元测试
class TestMathMethod(unittest.TestCase):
# 编写测试用例
# 测试用例就是一个函数,不能传参,只有self
# 所以的函数都是test_开头
# 测试准备环境,每条用例执行前执行
def setUp(self):
print("start testing")
# 清除测试环境,每条用例执行前执行
def tearDown(self):
print("end testing")
def test_add_two_positive(self):
res = MathMethod(1, 1).add()
print("1+1的结果是", res)
try:
self.assertEqual(1, res)
except AssertionError as e:
print(‘出错了,断言结果是{0}‘.format(e))
# 记得加raise e
raise e
def test_add_two_zero(self):
res = MathMethod(0, 0).add()
print("0+0的结果是", res)
try:
self.assertEqual(0, res)
except AssertionError as e:
print(‘出错了,断言结果是{0}‘.format(e))
# 记得加raise e
raise e
def test_add_two_negative(self):
res = MathMethod(-1, -2).add()
print("-1-2的结果是", res)
try:
self.assertEqual(-3, res)
except AssertionError as e:
print(‘出错了,断言结果是{0}‘.format(e))
# 记得加raise e
raise e
class TestMulti(unittest.TestCase):
def test_add_two_positive(self):
res = MathMethod(1, 1).multi()
print("1*1的结果是", res)
try:
self.assertEqual(1, res)
except AssertionError as e:
print(‘出错了,断言结果是{0}‘.format(e))
# 记得加raise e
raise e
def test_add_two_zero(self):
res = MathMethod(1, 2).multi()
print("1*2的结果是", res)
try:
self.assertEqual(2, res)
except AssertionError as e:
print(‘出错了,断言结果是{0}‘.format(e))
# 记得加raise e
raise e
def test_add_two_negative(self):
res = MathMethod(-1, -2).multi()
print("-1*-2的结果是", res)
try:
self.assertEqual(2, res)
except AssertionError as e:
print(‘出错了,断言结果是{0}‘.format(e))
# 记得加raise e
raise e
if __name__ == ‘__main__‘:
unittest.main()
下面给用例增加断言,并抛出异常
try:
self.assertEqual(2, res)
except AssertionError as e:
print(‘出错了,断言结果是{0}‘.format(e))
# 记得加raise e
raise e
执行结果控制台输出,(.、e、f)
. 代表执行通过
e 代表用例代码错误
f 代表用例执行失败
3、新建一个test.py来执行用例并生成测试报告:
import unittest
import HTMLTestRunnerNew
# from class_0521.Method import TestMathMethod
from class_0521 import test_method
suite = unittest.TestSuite()
# 1. 加载测试用例:把测试用例放到测试套件suite里面,通过测试用例添加
# suite.addTest(TestMathMethod(‘test_add_two_positive‘))
# suite.addTest(TestMathMethod(‘test_add_two_zero‘))
# 2.如果要测试100个,通过测试类添加
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(test_method))
# 3.通过模块来添加,这里导入的具体到模块名(from class_0521 import test_method)
# loader = unittest.TestLoader()
# suite.addTest(loader.loadTestsFromModule(test_method))
# 文件上下文管理器
with open(‘report.html‘, ‘wb‘) as file:
runner = HTMLTestRunnerNew.HTMLTestRunner(
stream=file, verbosity=2, title=‘test math‘, description=‘test math‘, tester=‘Albee‘
)
runner.run(suite)
其中HTMLTestRunnerNew为导入的测试框架,用来生成美观的html报告。
stream表示结果输出的位置,可以改为结果文件
verbosity参数表示结果的详细程度,0到2,数字越大越详细
关于常用的几个断言:
assertEqual:判断a==b
assertNotEqual: 判断a!=b
assertls(a,b) a is b
assertIsNone(a,b) 判断结果是否为空
原文:https://www.cnblogs.com/albeexu/p/12931503.html