Hi List,
I want to make some test case classes that can have some data passed in
to modify the way they behave. I can't see a straightforward manner to
pass data to an __init__() method of a class derived from
unittest.TestCase, or to pass data to a test function within that
class. Being a C++ guy, I thought "If only Python had something
equivalent to boost::bind, I'd be fine," and then I discovered
functools.partial. I found a post showing how to create classes using
partial, and I thought I was good to go. The post I found is here:
http://mail.python.org/pipermail/bangpypers/2008-December/000974.html
So I adapted that code to see if it worked in the context of unittest.
When I run the code, it acts like the parameter I provided with partial
isn't even there. Any ideas?
#!/usr/bin/python
import functools
import unittest
class GenericWindow:
def __init__(self, name, width, height, color='white'):
print('Name: %s, width: %d, height: %d, color: %s' % (name, width,
height, color))
class TestGenericWindow(unittest.TestCase):
def __init__(self, methodName, color):
unittest.TestCase.__init__(self, methodName)
print('color: %s' % color)
self.color = color
def testit():
GenericWindow('foo', width=100, height=100, color=self.color)
def suite():
s = unittest.Suite()
BrownWindowTest = functools.partial(TestGenericWindow, color='brown')
BlueWindowTest = functools.partial(TestGenericWindow, color='blue')
GreenWindowTest = functools.partial(TestGenericWindow, color='green')
s.addTest(unittest.makeSuite(BrownWindowTest))
s.addTest(unittest.makeSuite(BlueWindowTest))
s.addTest(unittest.makeSuite(GreenWindowTest))
return s
if __name__ == '__main__': #unittest.main()
unittest.main()
That code gives the following:
Traceback (most recent call last):
File "./functools.partial.py", line 32, in <module>
unittest.main()
File "/usr/lib/python2.6/unittest.py", line 816, in __init__
self.parseArgs(argv)
File "/usr/lib/python2.6/unittest.py", line 837, in parseArgs
self.test = self.testLoader.loadTestsFromModule(self.module)
File "/usr/lib/python2.6/unittest.py", line 559, in loadTestsFromModule
tests.append(self.loadTestsFromTestCase(obj))
File "/usr/lib/python2.6/unittest.py", line 550, in loadTestsFromTestCase
return self.suiteClass(map(testCaseClass, testCaseNames))
TypeError: __init__() takes exactly 3 arguments (2 given)
Thanks for having a look,
Joel
--
http://mail.python.org/mailman/listinfo/python-list