2017-06-13 69 views
1

我想设置py.test,使得灯具B可以返回给定灯具A的值的可变数量的参数。让我以当前实现为例进行说明。对于三个对象中的每一个,我想测试可变数量的属性。具有可变数量值的灯具取决于输入

@pytest.fixture(params=[Object1(), Object2(), Object3()]) 
def my_object(request): 
    return request.param 


def test_keys(my_object): 
    for key in my_object.valid_keys: 
     assert getattr(my_object, key) > 0, "mock test failed" 

上面实施的功能,但它是不容易从其中valid_keys进行了测试测试输出看。如果其中一个测试失败,后续测试将不会执行。理想情况下,我想要一个设置如下。

@pytest.fixture(params=[Object1(), Object2(), Object3()]) 
def my_object(request): 
    return request.param 


@pytest.fixture 
def valid_key(my_object): 
    # Return each valid key separately for each input object 


def test_keys(my_objects, valid_key): 
    assert getattr(my_object, valid_key) > 0, "mock test failed" 

这种结构可以让我更容易地分析我的测试中,观察范围,确保所有的测试都独立运行等

回答

0

如果你知道这正是有每个有效密钥相同数量对象,那么你写的代码将是完美的。 (完全像你的每个对象1个有效的键,更多只是将params添加到第二个灯具)。

如果这还不够,你必须进入大联盟,并编写了一个名为pytest_generate_tests一个pytest钩,它可以让你“定义自己的参数化方案”

文档在(根据pytest文档):https://docs.pytest.org/en/latest/example/parametrize.html

+0

是的,不幸的是,有效密钥的数量是可变的。 –