为什么不能unittest.TestCases看到我的pytest灯具?

时间:2014-03-27 03:23:09

标签: python unit-testing fixtures pytest python-unittest

我尝试将py.test fixtures与我的单元测试结合使用unittest。我已经在项目顶层的conftest.py文件中放置了几个灯具(如here所述),用@pytest.fixture装饰它们,并将它们的名称作为参数添加到测试需要它们的函数。

灯具正确注册,如py.test --fixtures test_stuff.py所示,但当我运行py.test时,我得到NameError: global name 'my_fixture' is not defined。这似乎只发生在我使用unittest.TestCase的子类时 - 但py.test文档似乎表明它与unittest的效果很好。

为什么在我使用unittest.TestCase时,测试会看到灯具?


不起作用:

conftest.py

@pytest.fixture
def my_fixture():
    return 'This is some fixture data'

test_stuff.py

import unittest
import pytest

class TestWithFixtures(unittest.TestCase):

    def test_with_a_fixture(self, my_fixture):
         print(my_fixture)

使用:

conftest.py

@pytest.fixture()
def my_fixture():
    return 'This is some fixture data'

test_stuff.py

import pytest

class TestWithFixtures:

    def test_with_a_fixture(self, my_fixture):
         print(my_fixture)

我更多地出于好奇而问这个问题;现在我完全放弃unittest

2 个答案:

答案 0 :(得分:7)

  

虽然pytest支持通过测试函数参数接收灯具   对于非单元测试方法,unittest.TestCase方法不能   直接接收夹具函数参数作为实现   可能会造成运行一般unittest.TestCase测试的能力   套件。

从底部的注释部分: https://pytest.org/latest/unittest.html

可以使用unittest.TestCase es的灯具。有关详细信息,请参阅该页面。

答案 1 :(得分:1)

您可以在 unittest.TestCase 中使用 pytest 固定装置与 pytest autouse :

conftest.py

@pytest.fixture
def my_fixture():
    return 'This is some fixture data'

test_stuff.py

import unittest
import pytest

class TestWithFixtures(unittest.TestCase):

    @pytest.fixture(autouse=True)
    def test_with_a_fixture(self, my_fixture):
         print(my_fixture)