在 Python 2.7 中子类模拟

Subclassing Mock in Python 2.7

我有一组单元测试,它们将重复使用我想模拟的某个合作者 class Rental,每次都传递相同的参数。为了使这更容易,我想创建一个 mock.Mock 的子 class 并在创建时传递参数。这是代码:

class RentalMock(Mock):
    def __call__(self, *args, **kwargs):
        super(RentalMock, self).__call__(*args, spec_set=Rental, **kwargs)
        self.get_points.return_value=0
        return self

问题是,当我实例化此 class 时,覆盖没有可见效果。并试图在此处覆盖它 不起作用。

> a = RentalMock()
> a.get_points()
<RentalMock name='mock.get_points' id='4447663888'>
> a.get_points.return_value = 0
> a.get_points()
<RentalMock name='mock.get_points' id='4447663888'>
> a.configure_mock(**{"get_points.return_value":0})
> a.get_points()
<RentalMock name='mock.get_points' id='4447663888'>

我彻底糊涂了。我已经尝试了三种方法,都是直接从文档中获取的,并且 none 似乎有效。当我将这些参数直接传递给 Mock 的实例时,它们工作正常。我错过了什么?

当您似乎想要覆盖 __init__ 时,您正在覆盖 __call__。子类化通常会涉及到,尤其是对于像 Mock 这样已经很复杂的东西。也许工厂功能会更简单。