1. ホーム
  2. python

[解決済み] if __name__ == '__main__'" の内容をテストまたはモック化する方法

2023-07-28 09:11:05

質問

以下のようなモジュールを持っているとします。

def main():
    pass

if __name__ == "__main__":
    main()

下半分の単体テストを書きたい(カバレッジ100%を目指したい)。私が発見したのは runpy を実行するビルトインモジュールを発見しました。 __name__ -の設定機構を実行するモジュールですが、モックやその他の方法で main() 関数が呼び出されたことを確認する方法がわかりません。

ここまで試した内容です。

import runpy
import mock

@mock.patch('foobar.main')
def test_main(self, main):
    runpy.run_module('foobar', run_name='__main__')
    main.assert_called_once_with()

どのように解決するのですか?

もう一つの方法、それは if __name__ == '__main__' をカバレッジレポートから除外することです。もちろん、すでにテストの中でmain()関数のテストケースを持っている場合のみ、これを行うことができます。

なぜスクリプト全体に対して新しいテストケースを書くのではなく、除外することにしたかというと、もし私が述べたように、あなたがすでにあなたの main() 関数のテストケースがある場合、スクリプトに別のテストケースを追加すると、(カバレッジを100%にするためだけに)重複したテストケースになるからです。

を除外する方法については if __name__ == '__main__' を除外する方法は、カバレッジ設定ファイルを書いて、セクションレポートに追加すればよいでしょう。

[report]

exclude_lines =
    if __name__ == .__main__.:

カバレッジ設定ファイルについての詳しい情報は はこちら .

これが助けになることを願っています。