對於那些知道Perl的人,我正在尋找類似於Python中的Test::Deep::is_deeply()
的東西。如何比較兩個嵌套數據結構進行單元測試?
在Python's unittest我可以方便地比較嵌套的數據結構已經,如果我希望他們是平等的:
self.assertEqual(os.walk('some_path'),
my.walk('some_path'),
"compare os.walk with my own implementation")
然而,以期望測試,文件在os.walk
元組的各個子列表的順序應毫無顧慮。
如果只是這個測試,那麼編寫簡單的解決方案就沒關係。但是我想象了幾個不同結構的嵌套數據的測試。我希望有一個通用的解決方案。
我檢查了Python自己的unittest documentation,看着pyUnit和nose and it's plugins。主動維護也是使用的一個重要方面。
的終極目標,我將有一組描述類型的像UnorderedIterable
,SubsetOf
,SupersetOf
,等這才叫來形容一個嵌套的數據結構,然後用這樣的描述比較兩個實際的數據集。
在我想是這樣的os.walk例如:
comparison = OrderedIterable(
OrderedIterable(
str,
UnorderedIterable(),
UnorderedIterable()
)
)
以上描述的數據結構,即list(os.walk())
將返回。對於數據在單元測試A
和數據B
的比較,目前的路徑名稱將被轉換成str()
,和DIR和文件列表將比較與忽略順序:
self.assertDeep(A, B, comparison, msg)
是那裏有什麼?或者人們自己編寫這樣一個微不足道的任務?我覺得這樣做很舒服,但我不想重塑,特別是不想編碼完整的正交類型集合,爲那些測試等。簡而言之,我不會發布它,因此下一個再次改寫......