我正在使用pytest来测试微控制器上的固件功能。它的界面与此对话无关。 因此,我在每个单元测试结束时都会进行一些检查,以确保微控制器仍然处于有效状态。
现在,这些检查对于每个单元测试都是通用的,在每个单元测试执行结束时执行。我认为使用装饰器来装饰每个单元测试而不是复制代码是有意义的。
除了现在,这个单元测试执行不再按顺序执行。单元测试现在似乎是随机执行的,而不是它们被定义的顺序,这是我介绍装饰器之前的行为。
有人可以告诉我为什么会这样吗?
伪代码示例:
def check_no_err(func):
def checker(api, *args, **kwargs):
func(api, *args, **kwargs)
assert 1 #<some checker code here run after the unittest>
@check_no_err
def test_eval_status(api):
assert 1 #unittest body here
编辑:我正在使用具有函数作用域的fixture来实现相同的行为,从而提供可预测的单元测试执行顺序。像这样:
@pytest.fixture(scope='function')
def test_end_checker(api):
assert 1 #the check to run after every test which includes this fixture
所以唯一剩下的问题是为什么执行顺序由于额外的装饰器而被随机化。