Pytest で argparse を利用しているコードをテスト2022年02月08日 13時32分40秒

Python だと、大体 argparse を用いてプログラムへの引数を処理する。他のライブラリもあったりするが、argparse は既に本体にも組み込まれていて、やりたいこともほぼ出来るので業々依存関係を増やす程の理由もないことが多い。

argparse の使い方を見ただけでは、どうやって pytest でテストを記述出来るかは流石に見抜けない。調べて、あれこれと指向錯誤する必要があった。一部の記事は古くなっているのかも知れない。現在手元で動作確認したのは Python 3.7。他にも、3.6 と 3.8 も使っているがそちらではまだ試す時間は取れていない。

簡潔に言うと、argparse は sys.argv を見に行くので、そこを unittest.mock.patch で置き換えてやれば良い。

from unittest.mock import patch

def test_argparse():
    with patch( "sys.argv", [ "program", "-a", "-b", "-c", "config.json" ] ):
        parser = argparse.ArgumentParser()
        ....
        parser.parse_args()

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2022/02/08/9462352/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。