我尝试将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
时,测试会看到灯具?
@pytest.fixture
def my_fixture():
return 'This is some fixture data'
import unittest
import pytest
class TestWithFixtures(unittest.TestCase):
def test_with_a_fixture(self, my_fixture):
print(my_fixture)
@pytest.fixture()
def my_fixture():
return 'This is some fixture data'
import pytest
class TestWithFixtures:
def test_with_a_fixture(self, my_fixture):
print(my_fixture)
我更多地出于好奇而问这个问题;现在我完全放弃unittest
。
答案 0 :(得分:7)
虽然pytest支持通过测试函数参数接收灯具 对于非单元测试方法,unittest.TestCase方法不能 直接接收夹具函数参数作为实现 可能会造成运行一般unittest.TestCase测试的能力 套件。
从底部的注释部分: https://pytest.org/latest/unittest.html
可以使用unittest.TestCase
es的灯具。有关详细信息,请参阅该页面。
答案 1 :(得分:1)
您可以在 unittest.TestCase
中使用 pytest 固定装置与 pytest autouse
:
@pytest.fixture
def my_fixture():
return 'This is some fixture data'
import unittest
import pytest
class TestWithFixtures(unittest.TestCase):
@pytest.fixture(autouse=True)
def test_with_a_fixture(self, my_fixture):
print(my_fixture)