On 9/28/2011 10:16 AM, Tim Chase wrote:

When performing unittest tests, I have a number of methods of the form

def test_foo(self):
data = (
(item1, result1),
... #bunch of tests for fence-post errors
)
for test, result in data:
self.assertEqual(process(test), result)

When I run my tests, I only get a tick for running one the one test
(test_foo), not the len(data) tests that were actually performed. Is
there a way for unittesting to report the number of passed-assertions
rather than the number of test-methods run?

In my view, unittest, based on JUnit from Java, is both overkill and inadequate for simple function testing of multiple input-output pairs. So I wrote my own short function test function that does just what I want, and which I can change if I change what I want.

Ben has described the combinatorial explosion solution. But if I were using unittest, I might do something like the following:

  def test_foo(self):
    data = (
      (item1, result1),
      ... #bunch of tests for fence-post errors
      )
    errors = []
    for input, expected in data:
      try:
        actual = process(input)
        if actual != expected: errors.append(input, expected, actual)
      except Exception as e:
        errors.append(input, expected, actual)
    self.assertEqual((0,[]), (len(errors),errors))

except that I would write a functest(func, iopairs) that returned the error pair. (This is essentially what I have done for for myself.) I am presuming that one can run unittest so that it prints the unequal items.

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to