J'aimerais passer mes propres arguments dans les fichiers qui sont configurés pour unittest. Ainsi, l'appeler à partir de la ligne de commande comme ceci devrait fonctionner :
python Test.py --c keith.ini SomeTests.test_one
Je rencontre actuellement deux problèmes.
1) Arg parse ne permet pas les arguments inconnus
l'utilisation : Test.py [-h] [--c CONFILE] Test.py : erreur : arguments non reconnus : SomeTests.test_one
2) Les tests unitaires n'autorisent pas les arguments inconnus. Donc --c nomdefichier n'est pas accepté par unittest et renvoie :
AttributeError : l'objet "module" n'a pas d'attribut "keith".
L'idée est donc de collecter mes arguments et de les supprimer avant d'appeler unittest runner.
import unittest
import argparse
myArgs = None
def getArgs( allArgs ):
parser = argparse.ArgumentParser( )
parser.add_argument('--c', dest='conFile', type=str, default=None, help='Config file')
args = parser.parse_args()
if ( args.conFile == None ):
parser.print_help()
return args
class SomeTests(unittest.TestCase):
def test_one(self):
theTest( 'keith' )
def test_two(self):
otherTest( 'keith' )
if __name__ == '__main__':
myArgs = getArgs( sys.argv )
print 'Config File: ' + myArgs.conFile
unittest.main( argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2))
Intéressant je viens de trouver parse_known_args() donc j'ai changé la ligne de parse en :
args = parser.parse_known_args(['--c']).
Je pensais que cela résoudrait mon problème et me donnerait quelque chose à transmettre à unittest. Malheureusement, j'obtiens :
Test.py: error: argument --c: expected one argument.
Cela ne devrait-il pas fonctionner ?