我想添加一个模拟参数,但我不知道我哪里出错了。
这是我尝试模仿' klass'它基本上代表了一个名为ClassPage的类,它有不同的值(没有方法)
class GrapheneHelper():
@staticmethod
def convert_time_field(klass, field, default=None):
time = GrapheneHelper.get_json_field(klass, field, default)
if time is None:
return None
else:
return iso8601.parse_date(time)
这是我修补ClassPage的测试:
@patch('gql.pages.content_page.ClassPage')
def test_convert_time_field(self, mock_klass):
""" Return YYYY-MM-DDTHH:MM:FF in iso8601 format """
mock_klass.json = {'time_field': '2017-09-18T23:09:33'}
expected_time = iso8601.parse_date('2017-09-18 23:09:33')
self.assertEqual(GrapheneHelper.convert_time_field(mock_klass, field='time_field', default=None), 'expected_time')
我得到的错误:ParseError: Expecting a string <MagicMock name='ClassPage.json.get()' id='4644743312'>
我觉得我真的很接近,但我还没有弄清楚出了什么问题。我已经尝试过MagicMock,阅读文档,甚至是一些没有运气的博客。任何建议将不胜感激
答案 0 :(得分:0)
根据您所提供的内容,我认为这是正在发生的事情:
GrapheneHelper.get_json_field
调用函数ClassPage.json.get()
因此,模拟get()
函数的返回值:
@patch('gql.pages.content_page.ClassPage')
def test_convert_time_field(self, mock_klass):
""" Return YYYY-MM-DDTHH:MM:FF in iso8601 format """
mock_klass.json.get.return_value = 'something expected'
time = '2017-09-18T23:09:57Z'
expected_time = '2017-09-18 23:09:57+00:00'
self.assertEqual(GrapheneHelper.convert_time_field(mock_klass, time, default=None), expected_time)