web-dev-qa-db-ja.com

ユニットテストの一部として2つのファイルを比較し、不一致の場合に有用な出力を取得するにはどうすればよいですか?

Python unittestフレームワークを使用したテストの一部として、2つの比較的短いテキストファイルを比較する必要があります。1つはテスト出力ファイルで、もう1つは参照ファイルです。 。

直接的なアプローチは次のとおりです。

import filecmp
...
self.assertTrue(filecmp.cmp(tst_path, ref_path, shallow=False))

テストに合格した場合は問題なく機能しますが、失敗した場合でも、出力にはあまり役立ちません。

AssertionError:Falseはtrueではありません

unittestフレームワークの一部として2つのファイルを比較するより良い方法があるので、不一致の場合にいくつかの有用な出力が生成されますか?

14
EquipDev

あなたがする必要があるのは、エラー状態のためのあなた自身のメッセージを追加することだけです。 doc

self.assertTrue(filecmp(...), 'You error message')

9
Dan

どの行に違いがあるかのレポートとその行のプリントアウトを取得するには、内容にassertListEqualを使用します。

self.assertListEqual(
    list(io.open(tst_path)),
    list(io.open(ref_path)))
5
Ethan Bradford

2つのファイルの内容を比較した方がいいのではないですか。たとえば、テキストファイルの場合、2つのファイルのテキストを比較すると、より意味のあるエラーメッセージが出力されます。

1
Bart

配列形式のファイルを比較すると、意味のあるアサートエラーが発生します。

assert [row for row in open(actual_path)] == [row for row in open(expected_path)]

ファイルを比較する必要があるたびにそれを使用したり、関数に入れたりすることができます。配列の代わりにテキスト文字列の形式でファイルを配置することもできます。

1
Adrien H