john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

unittest command line argument parameter attribute error module object

import logging
import os
import subprocess
import time
import tempfile
import unittest


class LineTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        logging_level = logging.DEBUG
        logging.basicConfig(level=logging_level, format='%(asctime)s %(levelname)s %(message)s',
                            filename=os.path.basename(__file__) + '.log', filemode='a')

    def setUp(self):
        logging.info('running test: {}'.format(self.id()))

    def test_menu(self):
        self.shell_match(self.BASE_CLI + 'foobar', ['Invalid namespace: foobar', 'Error'])
    self.file_match('/tmp/foobar', 'barfoo')


    # HELPERS

    def shell_match(self, command='/bin/true', phrases=None):
        if isinstance(phrases, basestring):
            # convert a string to a list item
            phrases = [phrases,]
        paragraph = subprocess.check_output('{} || true'.format(command), shell=True, stderr=subprocess.STDOUT)
        for phrase in phrases:
            self.assertIn(phrase, paragraph)

    def file_match(self, flat_file='/tmp/last_script', phrases=None):
        if isinstance(phrases, basestring):
            # convert a string to a list item
            phrases = [phrases,]
        text = open(flat_file).read()
        for item in phrases:
            self.assertIn(item, text)


- - -


/usr/bin/python2.7 /home/ubuntu/Desktop/repos/web/tests/sign_up_test.py myargument

Traceback (most recent call last):
  File "/home/ubuntu/Desktop/repos/web/tests/sign_up_test.py", line 95, in <module>
    unittest.main( )
  File "/usr/lib/python2.7/unittest/main.py", line 94, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python2.7/unittest/main.py", line 149, in parseArgs
    self.createTests()
  File "/usr/lib/python2.7/unittest/main.py", line 158, in createTests
    self.module)
  File "/usr/lib/python2.7/unittest/loader.py", line 128, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
    parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'myargument'



simple hack fix:


if __name__ == '__main__':
    if len(sys.argv) != 2:
        sys.exit( "ERROR: please provide a command line parameter" )

    parameter = sys.argv[ 1 ]       # defined in main, available to all objects/tests

    del sys.argv[ 1: ]      # since sys.argv[0] is the module name, remove everything after

    unittest.main()

  • « for loop modulo reversed countdown xrange dictionary Counter
  • Apt get autoremove cleanup dist upgrade ppa preseed prompts mysql »

Published

Feb 19, 2015

Category

python

~200 words

Tags

  • argument 1
  • attribute 2
  • command 29
  • error 14
  • line 31
  • module 9
  • object 7
  • parameter 6
  • python 180
  • unittest 12