Pytest PropertyMock未返回不同的属性值

0 投票
1 回答
18 浏览
提问于 2025-04-12 14:38

我正在尝试模拟一个对象的属性,让它在被调用时返回不同的值。目前我遇到的问题是

class A:
   def __init__(self):
      self.a1 = [1, 1]
      self.a2 = [2, 2]
      self.a3 = [3, 3]
   def run(self):
      for i in self.a2:
         print(f"val in a2: {i}")

def test_A(mocker):
   myObj = A()
   myObj.a2 = mocker.PropertyMock(side_effect = [[2, 3], [3,4], [4,5]])
   myObj.run()

这导致了一个错误:TypeError: 'PropertyMock' object is not iterable

1 个回答

0

我发现解决这个问题的方法是获取对象的类型,然后模拟这个类型的属性。所以解决方案就是

def test_A(mocker):
    myObj = A()
    type(myObj).a2 = mocker.PropertyMock(
        side_effect=iter([[2, 3], [3, 4], [4, 5]])
    )
    myObj.run()

撰写回答