Python';s的magic mock未按预期工作。实际函数被调用

Python';s的magic mock未按预期工作。实际函数被调用,python,unit-testing,magicmock,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\u graded方法编写测试时

我有一个模型:

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\u graded
方法编写测试时,我模拟
is\u complete\u graded
,在某些情况下返回true/false。测试调用的不是模拟,而是完全分级的实际
。我怎样才能解决这个问题

我的测试看起来像:

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)

您没有传入模拟对象。您正在传入真实数据:

filter_graded(Evaluation.objects.all())
您没有在任何地方模拟
Evaluation
Evaluation.objects
Evaluation.objects.all()

如果您的代码只是使用
is\u complete\u graded
方法查找对象,只需按顺序传入mock,无需执行任何ORM查询:

def test_filter_graded(self):
    eval1 = mock.MagicMock()
    eval2 = mock.MagicMock
    eval1.is_completely_graded.return_value = True
    eval2.is_completely_graded.return_value = False
    filter_graded([eval1, eval2])
    self.assertEqual(len(result), 1)

今天的第一次编辑…太晚了17秒!!:\在您的测试中,没有任何地方实际使用模拟替换真实对象。您正在传入
Evaluation.objects.all()
eval1
eval2
完全未使用。