Unittest проверяет get_arguments с требуемым аргументом

#python #unit-testing #arguments #command-line-arguments

#python #модульное тестирование #аргументы #аргументы командной строки

Вопрос:

Я использую coverage.py и unittest для проверки get_arguments

need_to_test.py

 def get_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument('-c', '--config', type=str, required=True)
    parser.add_argument('--num', type=str, default='0')
    ....
    args = parser.parse_args()
    return args
if __name__ == '__main__':
    args = get_arguments()
    ...
 

test_need_to_test.py

 import need_to_test
class Test_need_to_test(unittest.TestCase):

    def setUp(self):
        self.args = need_to_test.get_arguments()
      
    def test_get_arguments(self):
        #test self.args here
        ...

    def tearDown(self):
        pass

if __name__ == '__main__':
    unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
 

Но когда я запускаю

 coverage run test_need_to_test.py -c file_path 
 

произошла ошибка

 ----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute 'file_path'

----------------------------------------------------------------------
Ran 1 test in 0.000s
 

Как мне покрыть или протестировать функцию get_arguments с помощью unittest, или в unittest нам не нужно тестировать get_arguments(), просто пропустите его?

Комментарии:

1. Самый простой способ проверить — явно передать аргументы при его вызове : if __name__ == "__main__": args = get_arguments(sys.argv[1:]) . Затем вы можете предоставить свои собственные примеры, как показано в docs.python.org/3/library/argparse.html#beyond-sys-argv .

2. Вот пример, в котором я сделал именно это: github.com/textbook/eleanor-rigbot/blob /…