首页 > 其他 > 详细

单元测试

时间:2020-05-21 16:48:20      阅读:41      评论:0      收藏:0      [点我收藏+]

该文章是对自己写的简单代码进行单元测试

 

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!