Python unittest 模块差异认为 `tzinfo=<UTC>` 和 `tzinfo=tzutc()` 不相等

Python unittest module diff consider `tzinfo=<UTC>` and `tzinfo=tzutc()` unequal

我在 Python 的 unittest 模块中使用 assertListEqual() 时遇到问题。

当我执行 self.assertListEqual(expected, result) 时,它会正确比较项目。但是当有一点不同时,我就会得到一个差异。在那个差异中,除了明显不同的项目外,我得到很多行,如:

问题是:我怎样才能摆脱它,只看到真正不同的元素?

为了生成 expected 时间戳,我使用 dateutil.parser.parse 和 Django 的 ORM。

这是示例代码,它表明:

from datetime import datetime
import unittest
import pytz

from dateutil.parser import parse


class Test(unittest.TestCase):

    def test_foo(self):

        expected = [{
            'value': 1,
            'timestamp': datetime(2018, 1, 1, 0, 0, 0, tzinfo=pytz.utc),
        }]

        result = [{
            'value': 0,
            'timestamp': parse('2018-01-01T00:00:00Z'),
        }]

        self.assertListEqual(expected, result)


if __name__ == '__main__':
    unittest.main()

试试这个:

from datetime import datetime
import unittest
import pytz

import dateutil
from dateutil.parser import parse


class Test(unittest.TestCase):

    def test_foo(self):

        expected = [{
            'value': 1,
            'timestamp': datetime(2018, 1, 1, 0, 0, 0, tzinfo=dateutil.tz.tz.tzutc()),
        }]

        result = [{
            'value': 1,
            'timestamp': parse('2018-01-01T00:00:00Z'),
        }]

        self.assertListEqual(expected, result)


if __name__ == '__main__':
    unittest.main()