È necessario refactificare il codice e spostare l'analisi su una funzione:
def parse_args(args):
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser.parse_args(args)
Quindi nella tua main
funzione dovresti semplicemente chiamarlo con:
parser = parse_args(sys.argv[1:])
(dove il primo elemento sys.argv
rappresenta il nome dello script viene rimosso per non inviarlo come switch aggiuntivo durante l'operazione CLI.)
Nei tuoi test, puoi quindi chiamare la funzione parser con qualsiasi elenco di argomenti con cui vuoi testarlo:
def test_parser(self):
parser = parse_args(['-l', '-m'])
self.assertTrue(parser.long)
# ...and so on.
In questo modo non dovrai mai eseguire il codice dell'applicazione solo per testare il parser.
Se è necessario modificare e / o aggiungere opzioni al parser in un secondo momento nell'applicazione, creare un metodo di fabbrica:
def create_parser():
parser = argparse.ArgumentParser(...)
parser.add_argument...
# ...Create your parser as you like...
return parser
In seguito puoi manipolarlo se vuoi, e un test potrebbe apparire come:
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')