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()
セコメントをする