6

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タプルのそれぞれのサブリスト内のファイルの順序は関係ありません。

この 1 つのテストだけであれば、簡単なソリューションをコーディングしても問題ありません。しかし、異なる構造のネストされたデータに対するいくつかのテストを想定しています。そして、私は一般的な解決策を望んでいます。

私は Python 自身のunittest documentationをチェックし、 pyUnitを見て、nose を見て、それは pluginsです。アクティブなメンテナンスも使用上の重要な側面です。

私の最終的な目標は、ネストされたデータ構造を記述するために呼び出すことができる 、 、 などの記述型のセットを用意し、その記述を使用して 2 つの実際のデータ セットを比較することUnorderedIterableですSubsetOfSupersetOf

os.walk の例では、次のようなものが必要です。

comparison = OrderedIterable(
               OrderedIterable(
                 str,
                 UnorderedIterable(),
                 UnorderedIterable()
               )
             )

上記は、返されるデータ構造の種類について説明していlist(os.walk())ます。単体テストでのデータAとデータの比較では、現在のパス名が にキャストされ、ディレクトリとファイルのリストが順序を無視して比較されます。Bstr()

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

そこに何かありますか?それとも、人々が自分で書くのはとても些細な仕事ですか? 私はそれを快適に行うことができますが、再発明したくはありません。特に、型の完全な直交セット、それらのテストなどをコーディングしたくありません。要するに、私はそれを公開しないので、次のものはもう一度書き直して…

4

2 に答える 2

4

Python Deepは perl の Test::Deep を再実装するプロジェクトのようです。これは、Test::Deep の作者自身によって書かれています。最後の開発は 2016 年初頭に行われました。

更新 (2018 年 8 月): 最新リリース (2016 年 2 月) はPyPi/Deepにあります

github で P3k の移植作業をいくつか行いました

于 2013-02-12T11:17:45.480 に答える
1

解決策ではありませんが、質問に記載されている特定の例を解決するために現在実装されている回避策:

    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 の単体テストには必要な要素のほとんどが含まれています。

于 2013-02-11T19:08:55.797 に答える