私が嘲笑している報告があります。レポートはディクショナリとして返されます。レポートの各メトリックはキーであり、値は長さ 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 }
モックアウトされたメトリクスの値は、宣言された実際の戻り値ではなく、魔法のモックを示しています。この構文の何が問題になっていますか?