Question

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?

Was it helpful?

Solution

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

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

unit_dir = sys.argv[1] if len(sys.argv) > 1 else '.'
os.chdir(unit_dir)
suite = unittest.TestSuite()
for filename in os.listdir('.'):
    if filename.endswith('.py') and filename.startswith('test_'):
        modname = filename[:-2]
        module = __import__(modname)
        suite.addTest(unittest.TestLoader().loadTestsFromModule(module))

unittest.TextTestRunner(verbosity=2).run(suite)

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

testsuite.py UnitTests

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top