Debería refactorizar su código y mover el análisis a una función:
def parse_args(args):
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser.parse_args(args)
Luego, en su main
función, debe llamarlo con:
parser = parse_args(sys.argv[1:])
(donde el primer elemento sys.argv
que representa el nombre del script se elimina para no enviarlo como un interruptor adicional durante la operación CLI).
En sus pruebas, puede llamar a la función del analizador con cualquier lista de argumentos con los que desee probarla:
def test_parser(self):
parser = parse_args(['-l', '-m'])
self.assertTrue(parser.long)
# ...and so on.
De esta manera, nunca tendrá que ejecutar el código de su aplicación solo para probar el analizador.
Si necesita cambiar y / o agregar opciones a su analizador más adelante en su aplicación, cree un método de fábrica:
def create_parser():
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser
Luego puede manipularlo si lo desea, y una prueba podría verse así:
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')