【问题标题】:Mock instance isn't using property code模拟实例未使用属性代码
【发布时间】:2015-09-30 18:56:26
【问题描述】:

我有一些 Django 模型,我需要一些单元测试覆盖,因此我模拟了它们的一些实例。这是我想要覆盖的示例类

class MyMixin(object):
    @property
    def sum(self):
        return field_one + field_two + field_three

class MyModel(Model, MyMixin):

    field_one = IntegerField()
    field_two = IntegerField()
    field_three = IntegerField()

所以我可以像这样模拟它的一个实例:

mock_inst = mock.Mock(spec=MyModel, field_one=1, field_two=2, field_3=3)

但是,当我去执行mock_inst.sum 时,它没有正确执行代码,它给了我模拟类的一些东西。 它不应该执行实例中给定规范的代码吗?有没有办法指示我希望它执行该代码(或任何其他代码)的模拟?

【问题讨论】:

    标签: python django unit-testing


    【解决方案1】:

    正如丹尼尔在他的回答中所说,您不需要在这里使用模拟对象,只需创建模型的一个实例(在这种情况下,您甚至不需要将其保存到数据库中)。然后访问该属性,并检查它是否提供了所需的输出。

    def test_sum(self):
        my_model = MyModel(field_one=1,
                           field_two=2,
                           field_three=3,
                           )
        self.assertEqual(my_model.sum, 6)
    

    【讨论】:

      【解决方案2】:

      不,你为什么会这样想?模拟的全部意义在于它用假版本替换了对象。那个假版本不能——也不应该——运行实际类中的任何代码。

      【讨论】:

      • 好的...有没有简单的方法让它在该实例上运行该代码?
      • 是的:不要使用模拟。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      相关资源
      最近更新 更多