[解決済み] Pythonの「unittest」を使ってファイルを書いている関数のユニットテストを行う方法
2023-01-07 04:38:38
質問
出力ファイルをディスクに書き出すPython関数があります。
私はPythonの
unittest
モジュールを使ってユニットテストを書きたいと思います。
ファイルの等価性をどのように主張すればよいでしょうか。ファイルの内容が期待したものと異なる場合はエラーになり、さらに差分のリストが表示されるようにしたいです。Unix の 差分 コマンドの出力のように。
公式または推奨の方法はありますか?
どのように解決するのですか?
一番簡単なのは、出力ファイルを書き出し、その内容を読み、ゴールド(期待)ファイルの内容を読み、単純な文字列の等号で比較することです。 それらが同じである場合、出力ファイルを削除します。 それらが異なる場合、アサーションを発生させます。
この方法で、テストが終了したとき、失敗したテストはすべて出力ファイルで表され、サードパーティのツールを使ってゴールドファイルに対して差分を取ることができます ( 比較の先にあるもの はこのために素晴らしいツールです)。
もし本当にあなた自身のdiff出力を提供したいのであれば、Python stdlibにdifflibモジュールがあることを思い出してください。 Python 3.1 の新しい unittest サポートには
assertMultiLineEqual
メソッドがあり、それを使ってこのような diff を表示します。
def assertMultiLineEqual(self, first, second, msg=None):
"""Assert that two multi-line strings are equal.
If they aren't, show a nice diff.
"""
self.assertTrue(isinstance(first, str),
'First argument is not a string')
self.assertTrue(isinstance(second, str),
'Second argument is not a string')
if first != second:
message = ''.join(difflib.ndiff(first.splitlines(True),
second.splitlines(True)))
if msg:
message += " : " + msg
self.fail("Multi-line strings are unequal:\n" + message)
関連
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み] C# "internal "アクセス修飾子でユニットテストを行う場合
-
[解決済み] ディレクトリ内のすべてのPythonユニットテストを実行するにはどうすればよいですか?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonで "with open "を使って複数のファイルを開くにはどうしたらいいですか?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] virtualenvsはどこに作成するのですか?