【发布时间】:2017-03-29 08:41:10
【问题描述】:
所以我的 Django 应用业务逻辑中有我想要测试的功能:
def parse_sectors_from_csv():
sectors_csv = open(os.path.join(settings.BASE_DIR, 'sector', 'fixtures', 'sectors.csv'))
sectors_csv_reader = csv.DictReader(sectors_csv)
return [
{
'model': 'sector.sector',
'id': index,
'fields': {
'name': row.get('Sector'),
'slug': slugify(row['Sector']),
'type_id': row.get('Type_Id')
}
}
for index, row in enumerate(sectors_csv_reader, 1)
]
我已经测试了它是否存在文件和标题行。
现在我想模拟
open(os.path.join(settings.BASE_DIR, 'sector', 'fixtures', 'sectors.csv'))
在我的 test.py 中我写了
with patch('__builtin__.open', mock_open(read_data=sectors_csv_mock), create=True) as m:
sectors = service.parse_sectors_from_csv()
print('Sectors:', sectors)
self.assertEqual(expected_sectors, sectors)
但据我了解,它会在打印Sectors: [] 时传递空文件以发挥作用
我读了几遍 mock_open dock 还是不明白。
>>> with patch('__main__.open', mock_open(read_data='bibble')) as m:
... with open('foo') as h: # what's happening here?
... result = h.read() # here?
...
>>> m.assert_called_once_with('foo') # and here?
>>> assert result == 'bibble'
【问题讨论】:
标签: python django python-2.7 unit-testing mocking