87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
"""
|
|
automatically collect and run traditional "unittest.py" style tests.
|
|
|
|
drop this conftest.py into your project directory so that
|
|
all testing directories are below it.
|
|
|
|
you can mix unittest TestCase subclasses and
|
|
py.test style tests (discovery based on name).
|
|
|
|
user-extensions such as a custom test_suite()
|
|
will not be considered (see XXX).
|
|
|
|
$HeadURL: https://codespeak.net/svn/py/trunk/contrib/py_unittest/conftest.py $
|
|
$Id: conftest.py 58288 2008-09-21 08:17:11Z hpk $
|
|
"""
|
|
import py
|
|
import unittest
|
|
import sys
|
|
|
|
__version__ = "$Rev: 58288 $".split()[1]
|
|
|
|
def configproperty(name):
|
|
def fget(self):
|
|
ret = self._config.getvalue(name, self.fspath)
|
|
return ret
|
|
return property(fget)
|
|
|
|
class Module(py.test.collect.Module):
|
|
UnitTestCase = configproperty('UnitTestCase')
|
|
def makeitem(self, name, obj, usefilters=True):
|
|
# XXX add generic test_suite() support(?)
|
|
if py.std.inspect.isclass(obj) and issubclass(obj, unittest.TestCase):
|
|
return self.UnitTestCase(name, parent=self)
|
|
elif callable(obj) and getattr(obj, 'func_name', '') == 'test_suite':
|
|
return None
|
|
return super(Module, self).makeitem(name, obj, usefilters)
|
|
|
|
class UnitTestCase(py.test.collect.Class):
|
|
TestCaseInstance = configproperty('TestCaseInstance')
|
|
def collect(self):
|
|
return [self.TestCaseInstance("()", self)]
|
|
|
|
def setup(self):
|
|
pass
|
|
|
|
def teardown(self):
|
|
pass
|
|
|
|
_dummy = object()
|
|
class TestCaseInstance(py.test.collect.Instance):
|
|
UnitTestFunction = configproperty('UnitTestFunction')
|
|
def collect(self):
|
|
loader = unittest.TestLoader()
|
|
names = loader.getTestCaseNames(self.obj.__class__)
|
|
l = []
|
|
for name in names:
|
|
callobj = getattr(self.obj, name)
|
|
if callable(callobj):
|
|
l.append(self.UnitTestFunction(name, parent=self))
|
|
return l
|
|
|
|
def _getobj(self):
|
|
x = self.parent.obj
|
|
return self.parent.obj(methodName='run')
|
|
|
|
class UnitTestFunction(py.test.collect.Function):
|
|
def __init__(self, name, parent, args=(), obj=_dummy, sort_value=None):
|
|
super(UnitTestFunction, self).__init__(name, parent)
|
|
self._args = args
|
|
if obj is not _dummy:
|
|
self._obj = obj
|
|
self._sort_value = sort_value
|
|
|
|
def runtest(self):
|
|
target = self.obj
|
|
args = self._args
|
|
target(*args)
|
|
|
|
def setup(self):
|
|
instance = self.obj.im_self
|
|
instance.setUp()
|
|
|
|
def teardown(self):
|
|
instance = self.obj.im_self
|
|
instance.tearDown()
|
|
|