问题: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 ...
     ...
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐