Vous devez refactoriser votre code et déplacer l'analyse vers une fonction:
def parse_args(args):
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser.parse_args(args)
Ensuite, dans votre main
fonction, vous devez simplement l'appeler avec:
parser = parse_args(sys.argv[1:])
(où le premier élément de sys.argv
qui représente le nom du script est supprimé pour ne pas l'envoyer en tant que commutateur supplémentaire pendant l'opération CLI.)
Dans vos tests, vous pouvez ensuite appeler la fonction parser avec la liste d'arguments avec laquelle vous voulez la tester:
def test_parser(self):
parser = parse_args(['-l', '-m'])
self.assertTrue(parser.long)
# ...and so on.
De cette façon, vous n'aurez jamais à exécuter le code de votre application juste pour tester l'analyseur.
Si vous devez modifier et / ou ajouter des options à votre analyseur ultérieurement dans votre application, créez une méthode d'usine:
def create_parser():
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser
Vous pouvez le manipuler ultérieurement si vous le souhaitez, et un test pourrait ressembler à ceci:
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')