ich einen Komponententest für die folgende Funktion schreibe, die in my_script.py ist:Python Unit Test: Mimic eine Befehlszeilenargument für Testzwecke
def _parse_args():
parser = argparse.ArgumentParser(
description='Script to configure appliance.'
)
parser.add_argument('--config_file',
help='Path to a JSON configuration file')
print parser.parse_args()
return parser.parse_args()
Ich möchte ein Unit-Test erstellen um den Befehl zu imitieren Aufforderung:
myscript.py --config_file test.json
Dies ist, was ich bisher:
def test_parse_arg_test_config(self):
test ={
"name": "test_name",
"category": "test_category"
}
# set the fake command line prompt to be:
# myscript.py --config_file test
# (where test is defined above)
self.assertEquals(my_script._parse_args().config_file, test)
Es ist offensichtlich unvollständig, aber ich w Ich frage mich, ob ich mich dem richtigen Weg nähere, da _parse_args
keine Eingaben aufnimmt. Ich kenne keine andere Möglichkeit, eine Konfigurationsdatei nachzuahmen, die in die Funktion übergeben wird.
Was sollten Sie tun, ist Mock ArgumentParser, so dass Sie parse_args' erhalten 'zurückzukehren die Datenstruktur, die Sie zum Testen Ihres Codes verwenden möchten. Die [Mock] (http://www.voidspace.org.uk/python/mock/getting-started.html) Dokumentation ist ziemlich gut, und es gibt einige Beispiele, die Ihnen helfen werden. – idjaw
Ich glaube, Sie können 'parser.parse_args ([" my_script.py "," --config_file "," test "])' – zondo
@zondo Ich habe das versucht, aber die _parse_args Funktion nimmt keine Argumente selbst. Dies erzeugt den folgenden Fehler "TypeError: _parse_args() akzeptiert keine Argumente (1 gegeben)" – Catherine