如果我没有任何拆解,我是否需要使用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会按顺序执行所有顶级语句,并在执行第一次测试之前吗?
谢谢!
答案 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不会抱怨缺少它。