2017-03-01 40 views
-1

我有一个模型:Python的魔法模拟不能按预期工作。实际的函数被调用

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) 
+0

当天的第一个编辑... DAT太17sec晚了!! :\ – NoobEditor

+0

在你的测试中没有任何地方是你真正用嘲笑取代真实物体。您正在传递'Evaluation.objects.all()','eval1'和'eval2' *完全不用*。 –

回答

1

你是不是在嘲笑的对象传递。你逝去的实时数据:

filter_graded(Evaluation.objects.all()) 

无处你模拟出EvaluationEvaluation.objectsEvaluation.objects.all()

如果所有的代码所做的就是寻找一个is_completely_graded方法的对象,只是通过在嘲笑为顺序,无需任何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) 
相关问题