pytest夹具-获取值并避免错误“直接调用夹具'X'”

时间:2019-02-26 13:33:02

标签: python pytest fixtures

我已经将pytest更新到4.3.0,现在我需要重新编写测试代码,因为不建议直接调用灯具。

我在unittest.TestCase中使用的固定装置有问题,如何获取固定装置返回的值而不是对函数本身的引用?

示例:

@pytest.fixture
def test_value():
    return 1

@pytest.mark.usefixtures("test_value")
class test_class(unittest.TestCase):
    def test_simple_in_class(self):
        print(test_value)    # prints the function reference and not the value
        print(test_value())  # fails with Fixtures are not meant to be called directly

def test_simple(test_value):
    print(test_value)  # prints 1

如何在test_simple_in_class()方法中获取test_value?

2 个答案:

答案 0 :(得分:0)

已经有一个big discussion on this。您可以阅读该内容或参考depreciation docs

在您设计的示例中,看来

@pytest.fixture(name="test_value")
def test_simple_in_class(self):
    print(test_value())

是答案,但是我建议您检查文档-另一个示例可能就是您想要的。您可以阅读我链接到的讨论,以了解某些原因。但是辩论变得有些激烈。

答案 1 :(得分:0)

如果有人感兴趣,我的简单示例的解决方案。

def my_original_fixture():
    return 1

@pytest.fixture(name="my_original_fixture")
def my_original_fixture_indirect():
    return my_original_fixture()

@pytest.mark.usefixtures("my_original_fixture")
class test_class(unittest.TestCase):
    def test_simple_in_class(self):
        print(my_original_fixture())

def test_simple(my_original_fixture):
    print(my_original_fixture)