如何在python3.x中测试mixin类的monkeypatch

dxxyhpgq  于 2023-02-26  发布在  Python
关注(0)|答案(1)|浏览(144)

我需要使用pytest来monkeypatch一个被其他类继承的mixin类,python 3.x,我有这个例子:

class A:
  @classmethod
  def foo(cls) -> str:
    # do some database operation
    return "foo"

class B(A):
  pass

我最初想到的monkeypatch方法是这样的:

def test_B(monkeypatch):
  def mock_b__foo() -> str:
    return 'bar'
  monkeypatch.setattr('B.foo', mock_b__foo)

然后我试了这个:

def test_B(monkeypatch):
  class MockA:
    @classmethod
    def foo(cls) -> str:
      # do some database operation
      return "bar"

  monkeypatch.setattr('A', MockA)

这并不像预期的那样工作,B.foo仍然从A而不是MockA继承,因为我猜导入是一次性计算的,有什么方法可以实现这一点吗?

fbcarpbf

fbcarpbf1#

@chepner的注解解决了第一个代码片段的问题,monkeypatch.setattr应该用x1m1 n1 '的示例调用,而不是function,代码应该是:

def test_B(monkeypatch):
  def mock_b__foo() -> str:
return 'bar'

monkeypatch.setattr('B.foo', classmethod(mock_b__foo))

相关问题