需要保证每一个测试你必须是完全独立的,从而能够单独执行或者组团执行每个测试用例必须有断言,在测试失败的情况下,断言异常将异常抛出。
unittest默认按照ASCII码的顺序加载测试用例(字母与数字顺序为0-9,A-Z,a-z)
执行多级子目录下放一个__init__.py文件,该文件的作用是将一个目录标记一个标准python模块
import unittest
test_dir = './test_case'
suite=unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(suite)
使用unittest编写软件测试用例可以按照以下步骤进行:
定义一个继承unittest.TestCase的测试类,这个类中的每个测试用例都应该是独立的和可以单独执行的,每个测试用例都应该以test_开头。
在每个测试用例中添加需要测试的代码,使用相应的断言语句来进行测试,比如使用self.assertEqual()来判断预期结果与实际结果是否相等。
可以使用unittest提供的装饰器来跳过某些测试用例或者标记某些测试用例为预期失败。
可以使用TestSuite类的addTest()方法按照一定的顺序来加载测试用例,这样想先被执行的用例就可以先加载。
可以使用unittest提供的TextTestRunner()或其他运行器来运行测试用例。
代码示例:
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
# 测试字符串转大写功能
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
# 测试isupper()方法的正常使用
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
# 测试字符串分割功能
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# 检查,确保s.split()没有改变s本身
self.assertEqual(s, 'hello world')
if __name__ == '__main__':
# 构造测试集,按照指定顺序加载测试用例
suite = unittest.TestSuite()
suite.addTest(TestStringMethods('test_split'))
suite.addTest(TestStringMethods('test_upper'))
suite.addTest(TestStringMethods('test_isupper'))
# 使用TextTestRunner()运行测试
runner = unittest.TextTestRunner()
runner.run(suite)
在以上示例中,我们定义了一个测试类TestStringMethods,其中包含三个测试用例,分别测试字符串转大写、isupper()方法以及字符串分割功能。我们也通过TestSuite类按照指定顺序加载了这三个测试用例,并使用unittest提供的TextTestRunner()运行了测试。