Is this a good way to implement testing

Mark Lawrence breamoreboy at yahoo.co.uk
Sat May 2 19:17:56 EDT 2015


On 02/05/2015 23:29, Cecil Westerhof wrote:
> Still on my journey to learn Python.
>
> At the moment I define the test functionality in the following way:
>      if __name__ == '__main__':
>          keywords        = [
>              'all',
>              'factorial',
>              'fibonacci',
>              'happy',
>              'lucky',
>          ]
>          keywords_msg    = [
>              '--all',
>              '--factorial',
>              '--fibonacci',
>              '--happy',
>              '--lucky',
>          ]
>          (options,
>           extraParams)   = getopt.getopt(sys.argv[1:], '', keywords)
>          progname        = split(sys.argv[0])[1]
>
>          if len(options) > 1 or len(extraParams) != 0:
>              error   = '{0}: Wrong parameters ({1})'. \
>                        format(progname, ' '.join(sys.argv[1:]))
>              usage   = '    {0} {1}'.format(progname, ' | '.join(keywords_msg))
>              print(error, file = sys.stderr)
>              print(usage, file = sys.stderr)
>              sys.exit(1)
>
>          do_all = do_factorial = do_fibonacci = do_happy = do_lucky = False
>          if len(options) == 0:
>              do_all = True
>          else:
>              action = options[0][0]
>              if   action == '--all':
>                  do_all          = True
>              elif action == '--factorial':
>                  do_factorial    = True
>              elif action == '--fibonacci':
>                  do_fibonacci    = True
>              elif action == '--happy':
>                  do_happy        = True
>              elif action == '--lucky':
>                  do_lucky        = True
>              else:
>                  print >> sys.stderr, progname + ': Unhandled parameter ' + action
>                  sys.exit(1)
>
>          if do_all or do_factorial:
>          .
>          .
>          .
>
> Is this an acceptable way of working?
>

For code like the above I prefer the third party docopt module 
https://github.com/docopt/docopt although you could also try 
https://docs.python.org/3/library/argparse.html#module-argparse

The standard library unit testing framework is here 
https://docs.python.org/3/library/unittest.html#module-unittest but also 
see https://wiki.python.org/moin/PythonTestingToolsTaxonomy

-- 
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence




More information about the Python-list mailing list