1

我正在使用 pyest 学习参数化测试。在遵循相关的 pytest 文档之后,我想出了这个简单的例子:

import unittest

import pytest


@pytest.fixture(autouse=True, params=['foo', 'bar'])
def foo(request):
    print('fixture')
    print(request.param)


class Foo(unittest.TestCase):
    def setUp(self):
        print('unittest setUp()')

    def test(self):
        print('test')

这给出了以下错误:

Failed: The requested fixture has no parameter defined for the current test.
E               
E               Requested fixture 'foo' defined in:
E               tests/fixture.py:7

第 7 行是def foo(request):.

是什么导致了这个错误,我该如何解决?

4

1 回答 1

1

固定装置的目标是将对象传递给测试用例,但您制作的固定装置不会返回或产生任何东西。

然后我不确定您是否可以将对象传递给 unittest TestCase 方法,我认为它可能会与 self 参数产生一些冲突。

另一方面,它可以使用一个简单的功能:

@pytest.fixture(autouse=True, params=['foo', 'bar'])
def foo(request):
    print('fixture')
    print(request.param)
    yield request.param

# class Foo(unittest.TestCase):
#     def setUp(self):
#         print('unittest setUp()')
# 
#     def _test(self):
#         print('test')

def test_fixture(foo):
    assert foo == 'foo'

>>>  1 failed, 1 passed in 0.05 seconds
# test 1 run with foo : OK
# test 2 run with bar : FAILED

编辑 :

确实:为什么不能 unittest.TestCases 看到我的 py.test 夹具?

于 2017-08-22T20:30:08.933 回答