Python单元测试库ParseError:应为字符串<MagicMock name='ClassPage.json.get()'

2024-06-02 05:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图添加一个mock参数,但我不知道哪里出错了

在这个方法中,我试图模拟“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)

这是我修补类页的测试:

@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,读过文档,甚至一些博客,但运气都不好。如有任何建议,将不胜感激


Tags: 方法nonejsondefaultfieldconvertgetreturn
1条回答
网友
1楼 · 发布于 2024-06-02 05:31:47

根据你所给予的,我认为这是正在发生的:

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)

相关问题 更多 >