Pytest 夹具:每次测试之间的设置、拆卸和代码 运行
Pytest fixture: setup, teardown and code running between each test
我正在尝试使用 pytest 来测试我正在编写的模块。该模块是一个启动时间很长的进程的包装器。因此,我想确保我有一个正确的 setup/teardown 逻辑来确保初始化不会发生超过一次。
我当前的代码如下所示:
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
我注意到我的所有测试都将从调用重置我的模块开始!有什么办法可以把这个加到夹具上,或者你会怎么解决?
我想要的伪代码:
@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
如果初始设置不是那么繁重,我会跳过它并让 class 初始化每个测试。我试图查看请求对象的文档,但找不到合适的方法。我认为这必须以其他方式解决。有什么想法吗?
只介绍另一个执行重置的夹具。使它成为一个自动使用的夹具,以便它在每次测试之前自动执行:
@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
夹具将在模块中的每个测试之前重新运行。
我正在尝试使用 pytest 来测试我正在编写的模块。该模块是一个启动时间很长的进程的包装器。因此,我想确保我有一个正确的 setup/teardown 逻辑来确保初始化不会发生超过一次。
我当前的代码如下所示:
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
我注意到我的所有测试都将从调用重置我的模块开始!有什么办法可以把这个加到夹具上,或者你会怎么解决?
我想要的伪代码:
@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
如果初始设置不是那么繁重,我会跳过它并让 class 初始化每个测试。我试图查看请求对象的文档,但找不到合适的方法。我认为这必须以其他方式解决。有什么想法吗?
只介绍另一个执行重置的夹具。使它成为一个自动使用的夹具,以便它在每次测试之前自动执行:
@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
夹具将在模块中的每个测试之前重新运行。