【发布时间】:2019-03-22 13:28:06
【问题描述】:
这是我的测试课
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 的一部分,但仍然出现同样的错误。
我错过了什么?
【问题讨论】:
标签: python python-2.7 unit-testing pycharm command-line-arguments