相互连接的pytest固定装置:在最低等级的固定装置中变化测试数据

时间:2019-08-21 07:40:26

标签: python pytest fixtures

我想知道在以下情况下我是否使用了正确的方法:

我经常遇到这样的情况:我有一些基本数据(通常是熊猫数据框),我想对其进行转换并从中得出一些特殊方面。这些方面只计算一次(因为这些操作可能会非常昂贵),并被馈送到需要它们的方法中(此处为method_to_test)。

如果要测试这些方法,我需要basic data以及一些在aspect1上工作的灯具aspect2basic_data。一个非常人为的例子:

import pytest

@pytest.fixture
def basic_data:
   data = ['some', 'test', 'data']
   yield data

@pytest.fixture
def aspect1(basic_data):
    yield basic_data[-1]

@pytest.fixture
def aspect2(basic_data):
    yield len(basic_data)

def test_something(aspect1, aspect2):
    result = method_to_test(aspect1 ,aspect2)
    assert result == 'data3'

def method_to_test(a, b)
    return a + str(b)

我需要处理某些数据的确切方面的链,但是我希望basic_data因测试而异。由于我无法参数化夹具(据我所知),以一种幼稚的方法,我必须为每个具有不同{{的测试}复制这些夹具basic_dataaspect1aspect2 1}}。

我发现避免这种情况的方法是使用固定装置返回可参数化的函数以返回各方面:

basic_data

这是正确的方法吗?有更好的(或其他同样好的方法)吗?我想念什么吗?

0 个答案:

没有答案