Python 测试框架 unittest 初体验
前言
这是我的软件工程课程的第二次上机实验。实验的基本内容是使用一门 OO(Object Oriented) 语言的测试框架。遂记录如下。
简单使用说明
官网示例如下
# 测试三种字符串方法
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
运行结果
Testing started at 21:11 ...
Launching unittests with arguments python -m unittest C:/Users/17309/PycharmProjects/TDDExperiment/draft01.py in C:\Users\17309\PycharmProjects\TDDExperiment
Process finished with exit code 0
Ran 3 tests in 0.010s
OK
所谓测试,就是定义一个类,只是,这个类必须要继承
unittest.TestCase
这个父类。
另外,上述的类中的三个独立的方法,就是三个独立的测试,这些方法的命名都以
test
开头。这个命名约定告诉测试运行类哪些方法表示测试。
在 PyCharm 中,可以看出,以 test
开头的方法前面有一个绿色的可执行按钮。
根据 Python 文档
调用
assertEqual()
来检查预期的输出;调用assertTrue()
或assertFalse()
来验证一个条件;调用assertRaises()
来验证抛出了一个特定的异常。使用这些方法而不是assert
语句是为了让测试运行者能聚合所有的测试结果并产生结果报告。
这里简单选取几个函数记录它们的用法
assertEqual(first, second, msg=None)
: 测试第一个参数和第二个参数是否是相等的。如果它们的值不等,那么这个 test 将会失败。assertTrue(expr, msg=None)
: 测试 expr 是否正确。assertRaises(exception, *, msg=None)
: 测试是否抛出了指定的异常。
依葫芦画瓢
待测试的函数
import re
# 判断一个字符串是否是一个合法的 IP4 地址
def judgeIP4(string:str) -> bool:
ret = re.match(r"(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}"
r"([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$", string)
if ret:
return True
else:
return False
if __name__ == '__main__':
string = "10.16.82.108"
print(judgeIP4(string))
测试代码
import unittest
from IP4Test import judgeIP4
class TestJudgeIP4(unittest.TestCase):
def test_judgeIP4(self):
string = '10.16.82.108'
self.assertTrue(judgeIP4(string))
if __name__ == '__main__':
unittest.main()
测试输出
Testing started at 1:27 ...
Launching unittests with arguments python -m unittest C:/Users/17309/PycharmProjects/TDDExperiment/TestUnit.py in C:\Users\17309\PycharmProjects\TDDExperiment
Ran 1 test in 0.003s
OK
Process finished with exit code 0
Python 测试框架 unittest 初体验
http://fanyfull.github.io/2021/06/04/Python-测试框架-unittest-初体验/