pytest monkeypatch.setattr() 在测试类方法里面
·
问题:pytest monkeypatch.setattr() 在测试类方法里面
我有一个测试方法很少的测试类,我想从测试方法中修补一些应用程序类和方法。在 pytest 文档中,我找到了示例如何使用 monkeypatch 模块进行测试。该示例所有测试都只是函数,而不是 testclass 方法。
但是我有一个带有测试方法的类:
class MyTest(TestCase):
def setUp():
pass
def test_classmethod(self, monkeypatch):
# here I want to use monkeypatch.setattr()
pass
只是将monkeypatch作为方法参数传递显然是行不通的。所以看起来 py.test 魔法不能这样工作。
所以这个问题很简单,也许很愚蠢:我如何在测试类方法中使用monkeypatch.setattr()进行 pytest?
解答
在这种形式下不能工作
虽然 pytest 支持通过非 unittest 测试方法的测试函数参数接收夹具,但 unittest.TestCase 方法不能直接接收夹具函数参数作为实现,这可能会影响运行通用 unittest.TestCase 测试套件的能力。
您可以直接创建monkeypatch
from _pytest.monkeypatch import MonkeyPatch
class MyTest(TestCase):
def setUp():
self.monkeypatch = MonkeyPatch()
def test_classmethod(self):
self.monkeypatch.setattr ...
...
或创建自己的夹具,将monkeypatch添加到您的班级,并使用@pytest.mark.usefixtures
@pytest.fixture(scope="class")
def monkeypatch_for_class(request):
request.cls.monkeypatch = MonkeyPatch()
@pytest.mark.usefixtures("monkeypatch_for_class")
class MyTest(TestCase):
def setUp():
pass
def test_classmethod(self):
self.monkeypatch.setattr ...
...
更多推荐

所有评论(0)