推荐答案
// www.javascriptcn.com code example
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()本题详细解读
1. 导入 unittest 模块
首先需要导入 unittest 模块,这是 Python 标准库中的一个单元测试框架。
import unittest
2. 创建测试类
创建一个继承自 unittest.TestCase 的测试类。在这个类中,你可以定义多个测试方法。
class TestStringMethods(unittest.TestCase):
3. 定义测试方法
每个测试方法必须以 test_ 开头,这样 unittest 才能识别并运行这些方法。在测试方法中,使用 self.assertEqual()、self.assertTrue() 等断言方法来验证代码的行为是否符合预期。
// www.javascriptcn.com code example
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'])
with self.assertRaises(TypeError):
s.split(2)4. 运行测试
在脚本的最后,使用 unittest.main() 来运行测试。当脚本直接运行时,unittest.main() 会自动查找并运行所有以 test_ 开头的测试方法。
if __name__ == '__main__':
unittest.main()5. 运行结果
运行上述代码后,unittest 会输出测试结果。如果所有测试都通过,输出类似于:
... ---------------------------------------------------------------------- Ran 3 tests in 0.001s OK
如果有测试失败,unittest 会输出详细的错误信息,帮助你定位问题。
6. 常用断言方法
self.assertEqual(a, b):检查a == bself.assertTrue(x):检查x是否为Trueself.assertFalse(x):检查x是否为Falseself.assertRaises(exception, callable, *args, **kwargs):检查callable是否抛出了指定的异常
7. 测试套件
你可以使用 unittest.TestSuite 来组织多个测试类或测试方法,并控制它们的执行顺序。
suite = unittest.TestSuite()
suite.addTest(TestStringMethods('test_upper'))
suite.addTest(TestStringMethods('test_isupper'))
unittest.TextTestRunner().run(suite)8. 测试发现
unittest 支持自动发现测试文件和方法。你可以使用以下命令来自动发现并运行测试:
python -m unittest discover
这个命令会自动查找当前目录及其子目录中所有以 test_ 开头的文件,并运行其中的测试方法。