【发布时间】:2019-01-22 06:55:44
【问题描述】:
我正在使用参数化测试来测试 2 个不同的数据集。比如像这样。 some_data() 函数返回测试数据。
test_data = [
(some_data1_v1(), some_data2_v2()),
(some_data1_v2(), some_data2_v2())
]
@pytest.mark.parametrize('a,b', test_data)
def test_fn(a,b):
pass
但是对于一些只检查一般行为的测试,我不需要测试 2 个数据集,因为这两个数据集都有适当的一般数据。
我想将some_data1_v1() 函数转换为夹具并在测试中使用它,像这样
def test_fn2(some_data1_v1):
pass
如果我愿意,那么在test_data 列表构造期间调用some_data1_v1() 引发异常Fixtures are not meant to be called directly...
所以改为这个
def test_fn2(some_data1_v1):
pass
我喜欢这个
@pytest.mark.parametrize('some_data1_v1', [some_data1_v1()])
def test_fn2(some_data1_v1):
pass
这让我有一个测试数据源——“假夹具”(返回数据的常用函数),并在test_data 列表中传递测试数据(第一个示例或最后一个示例)。但我认为我在常用函数中存储数据的方法是打破“夹具抽象”。
有没有更好的方法来做我所做的事情?
【问题讨论】: