pytest说当我没有使用夹具时找不到夹具

时间:2016-04-06 20:23:56

标签: python unit-testing pytest

我试图对测试场景进行参数化,因此我不必为xUnit样式测试中的每个场景制作单独的案例。

这是pytest的一个例子,我试图为自己的用例复制。

    from datetime import datetime, timedelta

testdata = [
    (datetime(2001, 12, 12), datetime(2001, 12, 11), timedelta(1)),
    (datetime(2001, 12, 11), datetime(2001, 12, 12), timedelta(-1)),
]


@pytest.mark.parametrize("a,b,expected", testdata)
def test_timedistance_v0(a, b, expected):
    diff = a - b
    assert diff == expected

以上工作正常,但是当我尝试修改它以供我使用时,如下所示。我得到一个错误,说" dump"夹具未找到。我不知道发生了什么。这是我第一次使用pytest,所以也许我没有得到什么。

dump1 = load_dump(pathtodump1,pathtodump2) # load_dump can take multiple params
dump2 = load_dump(pathtodump3)

scenarios = [(dump1,{'prod_str':None}),
             (dump2,{'prod_str':"123"})]

@pytest.mark.paramaterize("dump,expected_meta", scenarios)
def test_metadump_profiles(dump, expected_meta):
        meta = dump.meta
        assert meta.prod_str == expected_meta['prod_str']

这是我从pytest获得的错误。我还要提一下,当我调试时,测试永远不会运行,它会在paramaterize装饰器中的某处失败。

========================================================================= ERRORS ==========================================================================
________________________________________________________ ERROR at setup of test_metadump_profiles _________________________________________________________
file /x/x/x-x/x/x/x/x/x/x/test_x.py, line 81
  @pytest.mark.paramaterize("dump,expect_meta", scenarios)
  def test_metadump_profiles(dump, expect_meta):
        fixture 'dump' not found
        available fixtures: capfd, capsys, recwarn, tmpdir_factory, tmpdir, monkeypatch, pytestconfig, record_xml_property, cache
        use 'py.test --fixtures [testpath]' for help on them.


.

1 个答案:

答案 0 :(得分:8)

import argparse

def foo():
  return 'foo'

def bar():
  return 'bar'

parser = argparse.ArgumentParser()
functions = {f.__name__:f for f in [foo, bar]}
parser.add_argument("function", type=lambda f: functions.get(f), help="which function", choices=functions.values())
args = parser.parse_args()
print(args.function())

这是无效的,而pytest会抛出一个没有意义的模棱两可的错误。这是由拼写错误引起的......

@pytest.mark.paramaterize

是有效的拼写。愚蠢的虫子我把头发拉了出来。 见github issue on this topic for more info.