Is there a way to dynamically create unittest
test cases? I have tried the following..
class test_filenames(unittest.TestCase):
def setUp(self):
for category, testcases in files.items():
for testindex, curtest in enumerate(testcases):
def thetest():
parser = FileParser(curtest['input'])
theep = parser.parse()
self.assertEquals(theep.episodenumber, curtest['episodenumber'])
setattr(self, 'test_%s_%02d' % (category, testindex), thetest)
..which creates all the methods correctly (they show up in dir()
and are callable), but unittest's test detector, nor nosetest
executes them ("Ran 0 tests in ...")
Since I may be asking the wrong question - what I am trying to achieve:
I have a file containing test data, a list of input filenames, and expected data (simplified to episodenumber
in the above code), stored in a Python dictionary. The key is the category, the value is a list of test cases, for example..
test_cases = {}
test_cases['example_1'] = [
{'input': 'test.01',
'episodenumber': 1},
{'input': 'test.02',
'episodenumber': 2}
]
test_cases['example_2'] = [
{'input': 'another.123',
'episodenumber': 123},
{'input': 'test.e42',
'episodenumber': 32}
]
Currently I just loop over all the data, call self.assertEquals
on each test. The problem is, if one fails, I don't see the rest of the failures as they are also grouped into one test, which aborts when an assertion fails.
The way around this, I thought, would be to (dynamically) create a function for each test case, perhaps there is a better way?