How to test Python classes that depend on argparse?

后端 未结 1 1769
生来不讨喜
生来不讨喜 2021-01-13 02:00

The below paste contains relevant snippets from three separate Python files. The first is a script called from the command line which instantiates CIPuller given certain arg

相关标签:
1条回答
  • 2021-01-13 02:19

    Unittesting for argparse is tricky. There is a test/test_argparse.py file that is run as part of the overall Python unittest. But it has a complicated custom testing harness to handle most cases.

    There are three basic issues, 1) calling parse_args with test values, 2) testing the resulting args, 3) testing for errors.

    Testing the resulting args is relatively easy. And the argparse.Namespace class has simple __eq__ method so you can test one namespace against another.

    There are two ways of testing inputs. One is to modify the sys.argv. Initially sys.argv has strings meant for the tester.

    self.args = parser.parse_args()
    

    tests sys.argv[1:] as a default. So if you change sys.argv you can test custom values.

    But you can also give parse_args a custom list. The argparse docs uses this in most of its examples.

    self.args = parser.parse_args(argv=myargv)
    

    If myarg is None it uses sys.argv[1:]. Otherwise it uses that custom list.

    Testing errors requires either a custom parse.error method (see docs) or wrapping the parse_args in a try/except block that can catch a sys.exit exception.

    How do you write tests for the argparse portion of a python module?

    python unittest for argparse

    Argparse unit tests: Suppress the help message

    Unittest with command-line arguments

    Using unittest to test argparse - exit errors

    0 讨论(0)
提交回复
热议问题