在编写测试用例时,我经常需要断言两个列表包含相同的元素,而不考虑它们的顺序。
我一直通过将列表转换为集合来做到这一点。
有没有更简单的方法来做到这一点?
EDIT:
正如@MarkDickinson 指出的那样,我可以使用TestCase.assertItemsEqual http://docs.python.org/library/unittest.html#unittest.TestCase.assertItemsEqual.
注意到TestCase.assertItemsEqual
是Python2.7中的新增内容。
如果您使用的是旧版本的Python,您可以使用单元测试2 http://pypi.python.org/pypi/unittest2- Python 2.7 新功能的向后移植。
从 Python 3.2 开始unittest.TestCase.assertItemsEqual
(doc https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertItemsEqual)已被替换为unittest.TestCase.assertCountEqual
(doc https://docs.python.org/3.2/library/unittest.html#unittest.TestCase.assertCountEqual)这正是您正在寻找的,正如您可以从 python 中读取的那样标准库文档 https://docs.python.org/3.2/library/unittest.html。该方法的名称有点误导,但它正是您所寻找的。
a 和 b 具有相同数量的相同元素,无论它们的顺序如何
这是一个简单的示例,比较具有相同元素但顺序不同的两个列表。
- using
assertCountEqual
测试会成功
- using
assertListEqual
由于两个列表的顺序不同,测试将失败
这是一个小示例脚本。
import unittest
class TestListElements(unittest.TestCase):
def setUp(self):
self.expected = ['foo', 'bar', 'baz']
self.result = ['baz', 'foo', 'bar']
def test_count_eq(self):
"""Will succeed"""
self.assertCountEqual(self.result, self.expected)
def test_list_eq(self):
"""Will fail"""
self.assertListEqual(self.result, self.expected)
if __name__ == "__main__":
unittest.main()
边注 :请确保您正在比较的列表中的元素是可排序的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)