Python测试模块的学习笔记
关于unittest模块
unittest是python发行版里面自带的一个模块,使用起来非常简单,为了能够更好的理解和使用unittest模块,必须了解一下一些基本的概念。
unittest模块是用来进行单元测试的一个模块。
关于该模块,有几个类必须理解。
TestCase类:该类是封装了一个测试用例,即每个测试用例对应于一个TestCase类。
TestSuite类:该类是一个测试集,即把相关的TestCase类集合到一起形成一个TestSuite
TestLoader类:该类负责搜索和装载TestCase到TestSuite中。
TextTestRunner类:该类负责运行测试用例。
TextTestResult类:该类负责存储测试用例的执行结果。
最后所有的以上类都集成在了unittest.main()模块中了。
理解了这些基本概念之后,来看一个很简单的例子(官方文档中的例子)
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()
上述这个例子很明确的告诉了我们unittest的使用方法。unittest中的测试函数必须作为某一个类的成员函数并通常以“test_”前缀开头,该类必须是TestCase的子类,之后执行unittest.main()函数,该模块就会自动封装每一个以“test_”前缀开头 的例子到一个TestCase类中,然后把所有的TestCase都装载到TestSuite中并由TextTestRunner负责执行。运行一下可以看到如下结果:
unittest模块还提供了一些命令行应用的简单命令,列举一些常用的如下:
测试特定模块:
python -m unittest Testmodule_name
测试特定模块中的某个类:
python -m unittest Testmodule_name.TestClass
测试特定模块某个类中的某个方法:
python -m unittest Testmodule_name.TestClass.TestMethod
列举可用的命令行选项:
python -m unittest -h
测试该模块,并显示执行了的测试方法:
python -m unittest -v Testmodule_name
测试当前目录下的所有测试用例:
python -m unittest
最后一个要提的就是unittest的skip和expectedFailure属性。可以看几个小例子。
跳过该测试函数,并且显示”demonstrating skipping”的提示
@unittest.skip("demonstrating skipping")
def test_nothing(self):
self.fail("shouldn't happen")
在满足特定的条件下跳过该测试用例:
@unittest.skipIf(mylib.__version__ < (1, 3),
"not supported in this library version")
def test_format(self):
# Tests that work for only a certain version of the library.
pass
该测试用例标记为失败的,在计算测试不通过的测试用例的时候不用考虑:
@unittest.expectedFailure
def test_fail