Python 如何比较单元测试的两个嵌套数据结构?

Python 如何比较单元测试的两个嵌套数据结构?,python,unit-testing,python-3.x,nested,data-comparison,Python,Unit Testing,Python 3.x,Nested,Data Comparison,对于那些了解perl的人,我正在寻找类似Python的东西 在中,我可以方便地比较嵌套数据结构,如果我希望它们相等: self.assertEqual(os.walk('some_path'), my.walk('some_path'), "compare os.walk with my own implementation") 但是,在通缉测试中,os.walk元组的相应子列表中的文件顺序应不受关注 如果只是这一个测试,那么

对于那些了解perl的人,我正在寻找类似Python的东西

在中,我可以方便地比较嵌套数据结构,如果我希望它们相等:

self.assertEqual(os.walk('some_path'),
                 my.walk('some_path'),
                 "compare os.walk with my own implementation")
但是,在通缉测试中,
os.walk
元组的相应子列表中的文件顺序应不受关注

如果只是这一个测试,那么编写一个简单的解决方案就可以了。但我设想对不同结构的嵌套数据进行一些测试。我希望找到一个普遍的解决办法

我检查了Python自己的,看了,看了。主动维护也是使用的一个重要方面

我的最终目标是拥有一组描述性类型,如
unordereditable
SubsetOf
SupersetOf
,可以调用这些类型来描述嵌套的数据结构,然后使用该描述来比较两组实际的数据

在os.walk示例中,我想要如下内容:

comparison = OrderedIterable(
               OrderedIterable(
                 str,
                 UnorderedIterable(),
                 UnorderedIterable()
               )
             )
上面描述了
list(os.walk())
将返回的数据结构类型。对于单元测试中数据
A
和数据
B
的比较,当前路径名将转换为
str()
,并且将忽略以下顺序比较目录和文件列表:

self.assertDeep(A, B, comparison, msg)

外面有什么东西吗?还是人们自己编写的任务如此琐碎?我觉得这样做很舒服,但我不想重新发明,特别是不想编写完整的正交类型集、这些类型的测试等等。总之,我不会发布它,因此下一个必须再次重写…

不是解决方案,但目前实施的解决问题中所列特定示例的变通方法:

    os_walk = list(os.walk('some_path'))
    dt_walk = list(my.walk('some_path'))
    self.assertEqual(len(dt_walk), len(os_walk), "walk() same length")
    for ((osw, osw_dirs, osw_files), (dt, dt_dirs, dt_files)) in zip(os_walk, dt_walk):
        self.assertEqual(dt, osw, "walk() currentdir")
        self.assertSameElements(dt_dirs, osw_dirs, "walk() dirlist")
        self.assertSameElements(dt_files, osw_files, "walk() fileList")
正如我们可以从这个示例实现中看到的,这是相当多的代码。我们还可以看到,Python的unittest具有所需的大部分成分。

似乎是一个重新实现perl的Test::Deep的项目。它是由Test::Deep的作者自己写的。上次开发发生在2016年初

更新(2018/8月):最新版本(2016/2月)位于


我做了一些

不幸的是,两个链接都没有了。你能更新你的答案吗?