有一份我正在嘲笑的报告。报告以字典形式返回 - 报告中的每个度量标准都是一个键,值是n长度的数组(报告中的天数)。在没有从报告返回数据的情况下,生成0的数组。报表中只有少数几个度量标准使用返回值进行模拟,因此预计返回的报表字典只包含具有值的特定度量标准。
当运行测试并断言输出是否等于预期结果时,魔术模拟将作为给定度量的值插入。我写了几个像这样的测试,之前没有遇到过。
from django.test import TestCase
from mock import patch
@patch.object(Report, 'clicks_data')
@patch.object(Report, 'sent_messages_data')
@patch.object(Report, 'run_for_group')
def test_group_report_return_csv_data(self, run_group, sent_msgs, clicks):
networks = self.networks ## defined in the setUp
group_report = GroupReport(networks, datetime(2014, 10, 24, 0, 0, 0), datetime(2014, 10, 26, 0, 0, 0), self.group.id)
group_report.run() ## this calls the Report.run_for_group()
run_group.return_value = None ## builds a property containing the raw data of all metrics recorded during those days; never returns a value but calls outside database
sent_msgs.return_value = [123, 111, 321]
clicks.return_value = [500, 345, 456]
result = { 'sent_msgs' : [123, 111, 321],
'clicks': [500, 345, 456],
'opened_msgs': [0, 0, 0],
'bounced_msgs': [0, 0, 0] }
self.assertEqual(result, group_report.email_group_report.get_csv_data())
错误讯息 -
AssertionError: ....
+ { 'sent_msgs': <MagicMock name='sent_msgs_data' id='4389821456'>,
+ 'clicks': <MagicMock name='clicks_data' id='4408776976'>,
- 'sent_msgs': [123, 111, 321],
- 'clicks': [500, 345, 456],
'opened_msgs': [0,0,0],
'bounded_msgs': [0,0,0 }
模拟的指标的值显示魔术模拟,而不是声明的实际返回值。这种语法有什么问题?