
Python的unittest模块是基于Java的JUnit框架开发出来的,提供了编写和运行单元测试的工具。这篇文章将介绍unittest模块的基本使用,涵盖创建测试用例、测试套件、断言、运行测试以及测试固件的使用。
在unittest中,测试用例是通过创建TestCase的子类来定义的。每个测试方法都应该以test为前缀。例如:
import unittestclass 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'])# 检查split是否会因为分隔符不是字符串而抛出错误with self.assertRaises(TypeError):s.split(2)
测试套件是一组测试用例或测试套件的集合。可以使用unittest.TestSuite()来创建一个测试套件。例如:
def suite():suite = unittest.TestSuite()suite.addTest(TestStringMethods('test_upper'))suite.addTest(TestStringMethods('test_isupper'))return suite
unittest提供了多种断言方法来检查代码的行为是否符合预期:
assertEqual(a, b):检查a和b是否相等。assertTrue(x):检查x是否为True。assertFalse(x):检查x是否为False。assertRaises(exception, callable, *args, **kwds):检查异常是否被抛出。可以通过以下方式运行测试:
if __name__ == '__main__':unittest.main()
这会搜索当前模块中所有的TestCase类,并自动运行它们。
测试固件包括了测试准备和清理代码,通常是setUp()和tearDown()方法。setUp()在每个测试方法执行前调用,而tearDown()在每个测试方法执行后调用。
class TestStringMethods(unittest.TestCase):def setUp(self):# 测试准备代码,例如:连接数据库passdef tearDown(self):# 测试清理代码,例如:关闭数据库连接pass
通过使用unittest模块,你可以创建可重复的测试用例来确保代码的每个部分都能按预期工作。这对于维护和改进代码质量至关重要。