Bạn nên cấu trúc lại mã của mình và di chuyển phân tích cú pháp sang một hàm:
def parse_args(args):
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser.parse_args(args)
Sau đó, trong main
chức năng của bạn, bạn chỉ cần gọi nó với:
parser = parse_args(sys.argv[1:])
(trong đó phần tử đầu tiên sys.argv
đại diện cho tên tập lệnh được loại bỏ để không gửi nó dưới dạng một công tắc bổ sung trong quá trình hoạt động CLI.)
Trong các thử nghiệm của bạn, sau đó bạn có thể gọi hàm phân tích cú pháp với bất kỳ danh sách đối số nào bạn muốn kiểm tra nó với:
def test_parser(self):
parser = parse_args(['-l', '-m'])
self.assertTrue(parser.long)
# ...and so on.
Bằng cách này, bạn sẽ không bao giờ phải thực thi mã ứng dụng của mình chỉ để kiểm tra trình phân tích cú pháp.
Nếu bạn cần thay đổi và / hoặc thêm tùy chọn vào trình phân tích cú pháp sau này trong ứng dụng của mình, thì hãy tạo phương thức xuất xưởng:
def create_parser():
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser
Sau này bạn có thể thao tác nó nếu bạn muốn và một bài kiểm tra có thể như sau:
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')