Python的魔法模拟没有按预期工作。实际函数被调用

时间:2017-03-01 12:32:19

标签: python unit-testing magicmock

我有一个模特:

class Evaluation(models.Model):
   def abc(self):
      #some logic here
      return something

说,我有另一个使用它的功能:

def filter_graded(evaluations):
    return filter(lambda x: x.is_completely_graded(), evaluations)

现在当我为filter_graded方法编写测试时,我模拟is_completely_graded以返回某些实例的true / false。测试调用实际is_completely_graded而不是尊重模拟。我该如何解决这个问题?

我的测试看起来像:

def test_filter_graded(self):
    eval1 = G(Evaluation)
    eval2 = G(Evaluation)
    eval1.is_completely_graded = mock.MagicMock(return_value=True)
    eval2.is_completely_graded = mock.MagicMock(return_value=False)
    filter_graded(Evaluation.objects.all())
    self.assertEqual(len(result), 1)

1 个答案:

答案 0 :(得分:1)

你没有传递模拟对象。您正在传递实际数据:

0

你没有嘲笑filter_graded(Evaluation.objects.all()) EvaluationEvaluation.objects

如果您的所有代码都是使用Evaluation.objects.all()方法查找对象,只需将mocks作为序列传递,不需要任何ORM查询:

is_completely_graded