对于那些了解 perl 的人,我正在寻找类似于Test::Deep::is_deeply()
Python 的东西。
在Python 的 unittest中,如果我希望它们相等,我已经可以方便地比较嵌套数据结构:
self.assertEqual(os.walk('some_path'),
my.walk('some_path'),
"compare os.walk with my own implementation")
但是,在想要的测试中,元组的各个子列表中的文件顺序无关紧要os.walk
。
如果只是这个测试,那么编写一个简单的解决方案就可以了。但我设想对不同结构的嵌套数据进行几个测试。我希望有一个通用的解决方案。
我检查了 Python 自己的unittest 文档,查看了pyUnit,并查看了nose 和它的 plugins。主动维护也是使用的一个重要方面。
我的最终目标是拥有一组描述性类型,如UnorderedIterable
, SubsetOf
,SupersetOf
等,可以调用它们来描述嵌套数据结构,然后使用该描述来比较两组实际数据。
在 os.walk 示例中,我想要类似的内容:
comparison = OrderedIterable(
OrderedIterable(
str,
UnorderedIterable(),
UnorderedIterable()
)
)
list(os.walk())
上面描述了将返回的数据结构类型。为了比较单元测试中的数据A
和数据B
,当前路径名将被转换为 a str()
,并且将比较目录和文件列表而忽略顺序:
self.assertDeep(A, B, comparison, msg)
外面有什么吗?还是人们自己编写的一项微不足道的任务?我觉得这样做很舒服,但我不想重新发明,特别是不想编写完整的正交类型集、对这些类型的测试等。简而言之,我不会发布它,因此下一个有再次重写...