tags:

views:

89

answers:

2

I am attempting to run some unit tests in python from what I believe is a module. I have a directory structure like

TestSuite.py
UnitTests
  |__init__.py
  |TestConvertStringToNumber.py

In testsuite.py I have

import unittest

import UnitTests

class TestSuite:
    def __init__(self):
     pass

print "Starting testting"
suite = unittest.TestLoader().loadTestsFromModule(UnitTests)
unittest.TextTestRunner(verbosity=1).run(suite)

Which looks to kick off the testing okay but it doesn't pick up any of the test in TestConvertNumberToString.py. In that class I have a set of functions which start with 'test'.

What should I be doing such that running python TestSuite.py actually kicks off all of my tests in UnitTests?

+2  A: 

Here is some code which will run all the unit tests in a directory:

#!/usr/bin/env python
import unittest
import sys
import os

test_modules=[sys.argv[1] + '.' + filename.replace('.py','') for filename in os.listdir(sys.argv[1])
              if filename.endswith('.py')]

map(__import__,test_modules)

suite = unittest.TestSuite()
for mod in [sys.modules[modname] for modname in test_modules]:
    suite.addTest(unittest.TestLoader().loadTestsFromModule(mod))
unittest.TextTestRunner(verbosity=1).run(suite)

If you call it testsuite.py, then you would run it like this:

testsuite.py UnitTests
unutbu
Beautiful, thanks. It was the __import__ function I was missing
stimms
A: 

Using Twisted's "trial" test runner, you can get rid of TestSuite.py, and just do:

$ trial UnitTests.TestConvertStringToNumber

on the command line; or, better yet, just

$ trial UnitTests

to discover and run all tests in the package.

Glyph