unittest一个简单的例子

  unittest模块为构造和运行测试提供了丰富的工具集。这一节演示了工具的一小部分满足大多数用户的需求。

  下面是一个测试三个字符串方法的简短脚本:

import unittest

class TestStringMethods(unittest.TestCase):

def test_upper(self):
print("test_upper")
self.assertEqual('foo'.upper(), 'FOO')

def test_isupper(self):
print("test_isupper")
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())

def itest_split(self):
print("test_split")
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()

  一个testcase是通过子类化unittest.testcase创建的。三个单独的测试用方法定义,这些方法的名字从字母test开始。这个命名约定通知测试运行者,哪些方法表示测试。

  每个测试的关键是调用assertEqual()来检查预期的结果;assertTrue() 或assertFalse()来验证一个条件;或者assertRaises()来验证一个特定的异常是否会被提高。这些方法被使用而不是断言语句,因此测试运行器可以积累所有的测试结果并生成一个报告。

  setUp()和tearDown()方法允许您定义在每个测试方法之前和之后执行的指令。在组织测试代码的部分中,将详细介绍它们。

  最后一个块显示了运行测试的简单方法。main()为测试脚本提供了一个命令行界面。当从命令行运行时,上面的脚本会生成如下输出:

  如果将test_upper的名字改为pest_upper,这个用例将不会被执行,说明只执行test开头的用例

 

  除了unittest.main(),还有其他一些方法可以使用更细的控制级别来运行测试,不那么简洁的输出,也不需要从命令行运行。例如,最后两行可能被替换为:

suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)

  输出为:

 

posted @ 2017-12-29 16:11  小茗同学123  阅读(1277)  评论(0编辑  收藏  举报