首先了解一下如何在 unittest 框架中编写测试用例。
为了更好的了解 unittest 本身,我们编写一个非常简单的函数来进行测试。
# 被测加法函数,传入待相加的参数,返回相加结果
def add(a, b):
return a + b
这就是单元测试最基本的单元——函数。
我们对这个 add() 函数进行测试,编写一些测试用例:
- 测试整数相加是否正确
- 测试字符串相加是否正确
- 测试列表相加是否正确
import unittest
class TestAdd(unittest.TestCase):
def test_add_int(self):
'''测试int相加'''
result = add(5, 100)
self.assertEqual(result, 105, '整数相加错误')
def test_add_str(self):
'''测试str相加'''
result = add('5', '6')
self.assertEqual(result, '11', '字符串相加错误')
def test_add_list(self):
result = add(['1', '2'], ['a', 'b'])
self.assertEqual(result, ['1','2','a','b'], '列表相加错误')
上面就是一个简单的测试用例的写法:
-
class TestAdd(unittest.TestCase)
uniitest 中的用例必须写成测试类,并且需要继承自 TestCase(派生类);
-
def test_add_int(self):
每一个测试用例必须写成测试函数,且必须以
test
开头。强烈注意!!!测试函数应该没有返回值,测试方法不应该有任何参数。
-
self.assertEqual(result, 105, '整数相加错误')
测试代码使用断言代码,判断预期结果与实际结果是否符合。
assertEqual()
方法是用来断言实际结果(add() 函数的调用结果 result)和预期结果(105)之间对比。如果不符合则在断言错误信息中输出提示“整数相加错误”。断言成功则表示测试通过,断言失败则抛出断言异常
AssertionError
表示测试失败。
测试用例的基本过程就是通过操作程序并检查预期结果与实际结果之间的差异。这里是一个单元测试过程,操作程序的过程是对最基本单元(函数)的实际调用过程。
然后将调用产生的实际结果与我们预期应该得到的结果使用断言方法来对比。
接下来,运行测试,这里我们用最基本的运行方式unittest.main()
:
if __name__ == "__main__":
unittest.main()
我们在用例中故意将test_add_str():
测试方法的断言写成失败:
..F
======================================================================
FAIL: test_add_str (__main__.TestAdd)
测试str相加
----------------------------------------------------------------------
Traceback (most recent call last):
File "d:\PythonProject\Python笔记\test_demo.py", line 17, in test_add_str
self.assertEqual(result, '11', '字符串相加错误')
AssertionError: '56' != '11'
- 56
+ 11
: 字符串相加错误
----------------------------------------------------------------------
Ran 3 tests in 0.000s
FAILED (failures=1)
共运行 3 个测试,其中 2 个成功,1 个失败。
我们来看看结果中有什么:
-
..F
:
-.
:代表测试通过,
-F
:代表测试失败。
-
FAIL: test_add_str (__main__.TestAdd)
:
- 断言错误的用例会抛出 AssertionError,并提示为何断言失败:'56' != '11'
,
--56 +11
表示结果缺少 56,而多出了 11。 -
Ran 3 tests in 0.000s
- 运行 3 个测试共耗时多少秒。 -
FAILED (failures=1)
- 失败数量。
运行结果中各个字符的含义:
-
.
:代表测试通过。 -
F
:代表测试失败,F 代表 failure。 -
E
:代表测试出错,E 代表 error。 -
s
:代表跳过该测试,s 代表 skip。 -
x
: 代表忽略该测试结果,x 代表 expected failures。
网友评论