вот мой тестовый класс
class TestProjectCreation(unittest.TestCase):
def setUp(self):
self.project_path = os.path.dirname(os.path.abspath(__file__))
self.project = ClassA('adasdasd', self.project_path)
def test_etl_project(self):
self.assertEqual(self.project.project_name,'adasdasd')
if __name__ == '__main__':
unittest.main()
и вот ClassA
class ClassA(BaseClass):
def __init__(self, project_name, project_path):
super(ClassA, self).__init__(project_name, project_path)
и, наконец, вот BaseClass
class BaseClass(object):
def __init__(self, project_name, project_path):
self.project_path = project_path
self.project_name = project_name
self.parser = self.create_option_parser()
(self.options, args) = self.parser.parse_args()
self.check_mandatory_options(self.options)
self.check_project_name(self.options)
def check_mandatory_options(self, options):
missing_arguments = []
if not options.para1:
missing_arguments.append('para1')
if not options.para2:
missing_arguments.append('para2')
if len(missing_arguments) > 0:
raise ValueError('Required argument(s) missing: {}'.format(missing_arguments))
примечание
self.parser = self.create_option_parser()
(self.options, args) = self.parser.parse_args()
следовательно BaseClass
ожидает некоторых аргументов командной строки
и в моем конфиге pycharm
Additional Arguments: --para1 val1 --para2 val2

но когда я запускаю тест, я получаю
Testing started at 11:05 AM ...
/path/to/python "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py" --multiproc --qt-support=auto --client 127.0.0.1 --port 51688 --file "/Applications/PyCharm CE.app/Contents/helpers/pycharm/_jb_unittest_runner.py" --path /path/to/project/tests/project_unit_tests.py -- --para1 val1 --para2 val2
pydev debugger: process 98200 is connecting
Connected to pydev debugger (build 181.5087.37)
Usage: python -m unittest discover [options]
python -m unittest discover: error: no such option: --para1
Launching unittests with arguments python -m unittest discover -s /path/to/project/test -p project_unit_tests.py -t /path/to/project/test --para1 val1 --para2 val2 in /path/to/project/test
Process finished with exit code 2
Empty test suite.
почему я получаю это python -m unittest discover: error: no such option: --para1
?
как я могу передать командную строкуаргументы моего объекта через модульный тест?Обратите внимание, что когда я запускаю main_project.py
def main():
project_path = os.path.dirname(os.path.abspath(__file__))
project = ClassA('adasdasd', self.project_path)
if __name__ == "__main__":
sys.exit(main())
как
python main_project.py --para1 val1 --para2 val2
, все работает нормально.Я также попытался
if __name__ == '__main__':
if len(sys.argv) != 2:
sys.exit("ERROR command-line parameter must be supplied for these tests")
command_line_param = sys.argv[1]
del sys.argv[1:]
unittest.main()
как часть моего TestProjectCreation
, но все равно получил ту же ошибку.
Чего мне не хватает?