Python 的魔法模拟没有按预期工作。实际函数被调用
Python's magic mock is not working as expected. Actual function gets called
我有一个模型:
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
模拟为 return 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)
您没有传递模拟对象。您正在传递真实数据:
filter_graded(Evaluation.objects.all())
你没有在任何地方模仿 Evaluation
或 Evaluation.objects
或 Evaluation.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)
我有一个模型:
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
模拟为 return 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)
您没有传递模拟对象。您正在传递真实数据:
filter_graded(Evaluation.objects.all())
你没有在任何地方模仿 Evaluation
或 Evaluation.objects
或 Evaluation.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)