gpt4 book ai didi

python - Pytest fixture : setup, 拆解和每个测试之间运行的代码

转载 作者:行者123 更新时间:2023-12-02 05:05:02 25 4
gpt4 key购买 nike

我正在尝试使用 pytest 来测试我正在编写的模块。该模块是一个启动时间较长的进程的包装。因此,我想确保我有一个正确的设置/拆卸逻辑,以确保初始化不会多次发生。

我当前的代码如下所示:

import pytest
import leelaZeroWrapper

@pytest.fixture(scope='module')
def leela(request):
leela = leelaZeroWrapper.LeelaWrapper()
def quit():
leela.quit()
request.addfinalizer(quit)
return leela

def test_single_play(leela):
leela.reset()
result = leela.play('b', 'a11')
assert result == [{'color': 'black', 'loc': 'a11'}]

def test_single_play_uppercase(leela):
leela.reset()
result = leela.play('WHITE', 'A11')
assert result == [{'color': 'white', 'loc': 'a11'}]

def test_reset(leela):
leela.reset()
leela.play('b', 'a11')
leela.play('w', 'a13')
leela.reset()
assert leela.current_board == []
assert leela.current_move == 0

我注意到我所有的测试都将从调用重置我的模块开始!有什么方法可以将其添加到 fixture 中,或者您将如何解决它?

我想要的伪代码:

@pytest.fixture(scope='module')
def leela(request):
leela = leelaZeroWrapper.LeelaWrapper()
def quit():
leela.quit()
def reset():
leela.reset()
request.addfinalizer(quit)
request.add_between_test_resetter(reset)
return leela

如果初始设置不是那么繁重,我会跳过这个并让类初始化每个测试。我试图查看请求对象的文档,但找不到合适的方法。我认为这个问题必须通过其他方式解决。有什么想法吗?

最佳答案

只需引入另一个执行重置的装置即可。使其成为自动使用装置,以便它在每次测试之前自动执行:

@pytest.fixture(scope='module')
def leela():
leela = leelaZeroWrapper.LeelaWrapper()
yield leela
leela.quit()

@pytest.fixture(autouse=True)
def reset(leela):
leela.reset()


def test_single_play(leela):
result = leela.play('b', 'a11')
assert result == [{'color': 'black', 'loc': 'a11'}]

默认的固定范围是function,因此reset固定装置将在模块中的每个测试之前重新运行。

关于python - Pytest fixture : setup, 拆解和每个测试之间运行的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com