cfi*_*cfi 6 python unit-testing nested data-comparison python-3.x
对于那些了解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")
Run Code Online (Sandbox Code Playgroud)
但是,在通缉测试中,os.walk元组的相应子列表中的文件顺序无关紧要.
如果只是这一个测试,那么可以编写一个简单的解决方案.但我设想对不同结构的嵌套数据进行多次测试.我希望得到一个普遍的解决方案.
我检查了Python自己的unittest文档,查看了pyUnit,以及它的鼻子和它的插件.主动维护也是使用的一个重要方面.
对我来说,最终的目标是将有一组描述性的类型,如UnorderedIterable,SubsetOf,SupersetOf,等这才叫来形容一个嵌套的数据结构,然后用这样的描述比较两个实际的数据集.
在os.walk示例中我喜欢以下内容:
comparison = OrderedIterable(
OrderedIterable(
str,
UnorderedIterable(),
UnorderedIterable()
)
)
Run Code Online (Sandbox Code Playgroud)
以上描述了list(os.walk())将返回的数据结构的类型.为了比较单元测试中的数据A和数据B,当前路径名称将被转换为a str(),并且将比较dir和文件列表而忽略订单:
self.assertDeep(A, B, comparison, msg)
Run Code Online (Sandbox Code Playgroud)
那里有什么吗?或者人们自己编写这样一个微不足道的任务?我觉得这样做很舒服,但是我不想重新发明,特别是不想编写完整的正交类型集,对它们进行测试等等.总之,我不会发布它,因此下一个有重写......
Python Deep似乎是一个重新实现 perl 的 Test::Deep 的项目。它是 Test::Deep 的作者自己写的。最后一次开发发生在 2016 年初。
更新(2018 年 8 月):最新版本(2016 年 2 月)位于PyPi/Deep上
我在github上做了一些P3k移植工作
不是解决方案,而是当前实施的解决方法来解决问题中列出的特定示例:
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")
Run Code Online (Sandbox Code Playgroud)
正如我们从这个示例实现中看到的,代码量相当大。我们还可以看到,Python 的单元测试拥有大部分所需的成分。
| 归档时间: |
|
| 查看次数: |
1788 次 |
| 最近记录: |