setup_module()与py.test中的顶级语句有什么不同?

时间:2012-10-03 01:35:03

标签: python

如果我没有任何拆解,我是否需要使用setup_module,还是只能使用顶级语句?

=== test_1.py ===
foo = 3
def test_foo(): assert foo == 3

=== test_2.py 
def setup_module(m): m.foo = 3
def test_foo(): assert foo == 3

py.test会按顺序执行所有顶级语句,并在执行第一次测试之前吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎py.test会在任何测试之前评估您的顶级语句,因此test_1.py将起作用。

但是,在编写测试时,拥有任何顶级语句通常不是一个好主意。您应该尝试将测试结构化为测试用例(包含相关测试代码的类),并测试应用程序的特定功能。因此,如果您将代码(test_2.py)转换为测试用例,它将看起来像这样:

def setup_module(module):
    module.TestFoo.foo = 3

class TestFoo:
    def test_foo(self):
        assert self.foo == 3

这样,您可以继续将所有相关测试添加到TestFoo,甚至可以为每个模块添加多个TestCase(尽管通常最好将每个TestCase添加到自己的文件中)。

关于您的teardown_module问题,当您需要将应用程序状态恢复到其初始状态(删除新创建的项目等)或清理挂起连接时,您只需要拆解 (关闭文件,套接字等)。在这种情况下,由于您的setup_module没有做任何需要清理的事情,因此不需要拆解并且py.test不会抱怨缺少它。