Python单元测试库 - ParseError:期待字符串<magicmock name =“ClassPage.json.get()”

时间:2017-11-03 16:15:01

标签: python unit-testing flask mocking

=“”

我想添加一个模拟参数,但我不知道我哪里出错了。

这是我尝试模仿&#39; klass&#39;它基本上代表了一个名为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,阅读文档,甚至是一些没有运气的博客。任何建议将不胜感激

1 个答案:

答案 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)