【发布时间】:2019-12-15 21:19:50
【问题描述】:
我正在尝试使用 pytest-mock 模拟一个 self 方法。
只是我的班级有一个我想模拟的函数“距离”。
我想测试我的 eq 函数,如下所示:
def __eq__(self, other):
return self.distance() == other.distance()
我尝试这样的事情:
def test_eq(mocker):
i = mocker.MagicMock(Interval)
mocker.patch.object(i, 'distance', return_value=1)
i2 = mocker.MagicMock(Interval)
mocker.patch.object(i2, 'distance', return_value=1)
assert i == i2
但是这个返回:
AssertionError: assert ==
我也试过
mocker.patch.object(i, 'self.distance', return_value=1)
但这给了我一个 AttributeError,正如我对 MagicMock 所期望的那样。
修补我的对象 self 方法的正确方法是什么?
【问题讨论】:
-
您要比较的是两个 mock 对象是否相同 - 它们不会是那样,因为您在第二次调用 MagicMock 时创建了一个新对象.您是否想比较对它们都调用
distance()的结果,而不是它们是同一个实际对象? -
@MatsLindh 我编辑了我的问题,添加了我想要实现的目标。我只想在我的 Interval 对象中测试我的 eq 函数。这就是我断言 i == i2 的原因。
-
为什么不创建两个您知道相等的区间并进行比较?
-
是的,我先试试这个。问题是我必须测试很多我已经在我的 distance() 方法中测试过的东西。所以我不想为 eq 写很多测试,因为我只知道它取决于 distance()。
标签: python pytest pytest-mock