0

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

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

问题是,当我实例化此类时,该覆盖没有明显的效果。并且试图在这里覆盖它不起作用。

> 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'>

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

4

1 回答 1

0

__call__当您看起来想要覆盖时,您正在覆盖__init__。子类化经常会涉及到,尤其是像 Mock 这样已经很复杂的东西。也许工厂函数会更简单。

于 2017-04-30T10:12:27.713 回答