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
完全未使用。