[pyunit] Only run one specific test
Dave Angel
davea at ieee.org
Thu May 28 14:15:57 EDT 2009
Nikolaus Rath wrote:
> Hi,
>
> Consider these two files:
>
> ,---- mytest.py -----
> | #!/usr/bin/env python
> | import unittest
> |
> | class myTestCase(unittest.TestCase):
> | def test_foo(self):
> | pass
> |
> | # Somehow important according to pyunit documentation
> | def suite():
> | return unittest.makeSuite(myTestCase)
> `----
>
> ,---- runtest ---
> | #!/usr/bin/env python
> | import unittest
> |
> | # Find and import tests
> | modules_to_test = [ "mytest" ]
> | map(__import__, modules_to_test)
> |
> | # Runs all tests in test/ directory
> | def suite():
> | alltests = unittest.TestSuite()
> | for name in modules_to_test:
> | alltests.addTest(unittest.findTestCases(sys.modules[name]))
> | return alltests
> |
> | if __name__ == '__main__':
> | unittest.main(defaultTest='suite')
> `----
>
>
> if I run runtest without arguments, it works. But according to runtest
> --help, I should also be able to do
>
> ,----
> | $ ./runtest mytest
> | Traceback (most recent call last):
> | File "./runtest", line 20, in <module>
> | unittest.main()
> | File "/usr/lib/python2.6/unittest.py", line 816, in __init__
> | self.parseArgs(argv)
> | File "/usr/lib/python2.6/unittest.py", line 843, in parseArgs
> | self.createTests()
> | File "/usr/lib/python2.6/unittest.py", line 849, in createTests
> | self.module)
> | File "/usr/lib/python2.6/unittest.py", line 613, in loadTestsFromNames
> | suites = [self.loadTestsFromName(name, module) for name in names]
> | File "/usr/lib/python2.6/unittest.py", line 584, in loadTestsFromName
> | parent, obj = obj, getattr(obj, part)
> | AttributeError: 'module' object has no attribute 'mytest'
> `----
>
>
> Why doesn't this work?
>
> Best,
>
> -Nikolaus
>
>
>
First, you're missing a import sys in the runtest.py module. Without
that, it won't even start.
Now, I have no familiarity with unittest, but I took this as a
challenge. The way I read the code is that you need an explicit import
of mytest if you're
going to specify a commandline of
runtest mytest
So I'd add two lines to the beginning of runtest.py:
import sys
import mytest
More information about the Python-list
mailing list