WEB开发网
开发学院软件开发Python Python 测试框架: 选择和运行测试 阅读

Python 测试框架: 选择和运行测试

 2009-09-06 00:00:00 来源:WEB开发网   
核心提示: 正如在前一篇文章中看到的,py.test 往往选择单一标准,Python 测试框架: 选择和运行测试(3),期望使用它的所有项目都遵守这一标准;而 nose 允许更丰富的定制,但是这会牺牲行为的可预测性,第三,在类包含的测试之前和之后,对于测试发现,也是如此:py.test 按照固定、不可变且可

正如在前一篇文章中看到的,py.test 往往选择单一标准,期望使用它的所有项目都遵守这一标准;而 nose 允许更丰富的定制,但是这会牺牲行为的可预测性。对于测试发现,也是如此:py.test 按照固定、不可变且可预测的规则检测测试模块中的测试,而 nose 采用灵活的可定制的规则。如果项目使用 nose 执行测试,就先必须阅读项目的 setup.cfg 文件,了解 nose 是采用通常的测试检测规则,还是采用这个项目特有的规则。

下面是 py.test 使用的过程:

当 py.test 检查 Python 测试模块的内部时,它收集名称以 test_ 开头的每个函数和名称以 Test 开头的每个类。无论类是否继承自 unittest.TestCase,它都会收集它们。

测试函数直接运行,但是对于测试类,还必须搜索方法。类实例化之后,作为测试运行名称以 test_ 开头的所有方法。

如果测试类继承自标准的 Python unittest.TestCase 类,py.test 框架会表现出一种古怪的行为:如果类不包含 runTest() 方法,那么即使它包含几个 test_ 方法,py.test 也会抛出异常并失败。但是,如果存在 runTest() 方法,py.test 会忽略它;这个方法必须存在,py.test 才能接受这个类,但是不会运行这个方法,因为它的名称不是以 test_ 开头的。

为了纠正这种行为,可以在项目的 conttest.py 文件中或使用 -p 命令行选项激活框架的 unittest 插件:

       $ py.test -p unittest

这会让 py.test 对其行为做三个更改。首先,不再只检测名称以 Test 开头的类,还会检测继承自 unittest.TestCase 的其他类。第二,对于没有提供 runTest() 方法的 TestCase 子类,py.test 不再报告异常。第三,在类包含的测试之前和之后,以标准方式正确地运行 TestCase 子类中的所有 setUp() 和 tearDown() 方法。

上一页  1 2 3 4 5 6 7  下一页

Tags:Python 框架

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接