How many times does unittest run each test?

Josh English Joshua.R.English at gmail.com
Sat Aug 10 16:00:30 EDT 2013


I am working on a library, and adding one feature broke a seemingly unrelated feature. As I already had Test Cases written, I decided to try to incorporate the logging module into my class, and turn on debugging at the logger before the newly-broken test.

Here is an example script:
# -----
#!/usr/bin/env python

import logging

def get_vals():
    return ['a','b','c']

class SimpleChecker(object):
    def __init__(self, callback=None):
        self.callback = callback
        self.logger = logging.getLogger(self.__class__.__name__)
        h = logging.StreamHandler()
        f = logging.Formatter("%(name)s - %(levelname)s - %(message)s")
        h.setFormatter(f)
        self.logger.addHandler(h)

    def __call__(self, thing):
        self.logger.debug('calling %s' % thing)
        vals = self.callback()
        return thing in vals

import unittest

class LoaderTC(unittest.TestCase):
    def setUp(self):
        self.checker = SimpleChecker(get_vals)

    def tearDown(self):
        del self.checker

    def test_callable(self):
        self.assertTrue(callable(self.checker),
            'loader did not create callable object')
        self.assertTrue(callable(self.checker.callback),
            'loader did not create callable callback')

        self.checker.logger.setLevel(logging.DEBUG)
        self.assertTrue(self.checker('q') is False, "checker accepted bad input")

class NameSpaceTC(unittest.TestCase):
    def setUp(self):
        self.checker = SimpleChecker(get_vals)

    def tearDown(self):
        del self.checker

    def test_callable(self):
        self.assertTrue(callable(self.checker),
            'loader did not create callable object')
        self.assertTrue(callable(self.checker.callback),
            'loader did not create callable callback')

        self.checker.logger.setLevel(logging.DEBUG)
        self.assertTrue(self.checker('a'), "checker did not accept good value")
        self.assertFalse(self.checker('f'), "checker accepted bad value")

if __name__=='__main__':
    unittest.main(verbosity=0)

# -------

When I run this, I get:
SimpleChecker - DEBUG - calling q
SimpleChecker - DEBUG - calling a
SimpleChecker - DEBUG - calling a
SimpleChecker - DEBUG - calling f
SimpleChecker - DEBUG - calling f
----------------------------------------------------------------------
Ran 2 tests in 0.013s

OK
Exit code:  False

Why am I seeing those extra debugging lines? In the script I'm really trying to debug, I see 12-13 debug messages repeated, making actual debugging difficult.

Josh English



More information about the Python-list mailing list