[TIP] Test Parameterization with unittest

Michael Foord fuzzyman at voidspace.org.uk
Sun May 10 12:38:59 PDT 2009


Hello guys,

There was a recent discussion on test parameterisation. I didn't follow 
the discussion very closely to gather your requirements, but spurred on 
my Brandon Rhodes I've hacked together a simple technique:

http://code.google.com/p/unittest-ext/source/browse/trunk/params.py

It actually uses a metaclass, but to use it you inherit from 
TestCaseWithParams and provide a 'params' (list or iterable) class 
attribute and an 'assertWithParams' method.

A new test method is generated for each member of the params list. This 
test:


class Test(TestCaseWithParams):
    params = [(1, 1), (2, 3), (2, 2), (3, 5)]
   
    def assertWithParams(self, a, b):
        self.assertEqual(a, b)

Produces the following output:

C:\compile>python test.py
Test with args: (1, 1) ... ok
Test with args: (2, 3) ... FAIL
Test with args: (2, 2) ... ok
Test with args: (3, 5) ... FAIL

======================================================================
FAIL: Test with args: (2, 3)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 17, in test
    self.assertWithParams(*args)
  File "test.py", line 38, in assertWithParams
    self.assertEqual(a, b)
AssertionError: 2 != 3

======================================================================
FAIL: Test with args: (3, 5)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 17, in test
    self.assertWithParams(*args)
  File "test.py", line 38, in assertWithParams
    self.assertEqual(a, b)
AssertionError: 3 != 5

----------------------------------------------------------------------
Ran 4 tests in 0.016s

FAILED (failures=2)

All the best,

Michael

-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog





More information about the testing-in-python mailing list