Anda harus memperbaiki kode Anda dan memindahkan parsing ke fungsi:
def parse_args(args):
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser.parse_args(args)
Maka dalam main
fungsi Anda, Anda harus menyebutnya dengan:
parser = parse_args(sys.argv[1:])
(di mana elemen pertama sys.argv
yang mewakili nama skrip dihapus untuk tidak mengirimkannya sebagai saklar tambahan selama operasi CLI.)
Dalam pengujian Anda, Anda kemudian dapat memanggil fungsi parser dengan daftar argumen apa pun yang ingin Anda uji dengan:
def test_parser(self):
parser = parse_args(['-l', '-m'])
self.assertTrue(parser.long)
# ...and so on.
Dengan cara ini Anda tidak perlu menjalankan kode aplikasi Anda hanya untuk menguji parser.
Jika Anda perlu mengubah dan / atau menambahkan opsi ke parser Anda nanti di aplikasi Anda, kemudian buat metode pabrik:
def create_parser():
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser
Anda kemudian dapat memanipulasi jika Anda mau, dan tes bisa terlihat seperti:
class ParserTest(unittest.TestCase):
def setUp(self):
self.parser = create_parser()
def test_something(self):
parsed = self.parser.parse_args(['--something', 'test'])
self.assertEqual(parsed.something, 'test')