# HG changeset patch -- Bitbucket.org # Project pytest # URL http://bitbucket.org/hpk42/pytest/overview # User holger krekel <hol...@merlinux.eu> # Date 1288649296 -3600 # Node ID ac86d3a188b1da11c3df0fe6054805e7cb625a83 # Parent 7d2db9cfe9216159f9b41347e659fffca6095564 majorly changing the unittest compatibility code, calling TestCase(name)(result)
--- a/pytest/plugin/python.py +++ b/pytest/plugin/python.py @@ -383,7 +383,8 @@ class Function(FunctionMixin, pytest.col config=config, collection=collection) self._args = args if self._isyieldedfunction(): - assert not callspec, "yielded functions (deprecated) cannot have funcargs" + assert not callspec, ( + "yielded functions (deprecated) cannot have funcargs") else: if callspec is not None: self.funcargs = callspec.funcargs or {} --- a/pytest/__init__.py +++ b/pytest/__init__.py @@ -5,7 +5,7 @@ see http://pytest.org for documentation (c) Holger Krekel and others, 2004-2010 """ -__version__ = '2.0.0.dev17' +__version__ = '2.0.0.dev18' __all__ = ['config', 'cmdline'] --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ Changes between 1.3.4 and 2.0.0dev0 ---------------------------------------------- - pytest-2.0 is now its own package and depends on pylib-2.0 +- try harder to run unittest test suites in a more compatible manner + by deferring setup/teardown semantics to the unittest package. - introduce a new way to set config options via ini-style files, by default setup.cfg and tox.ini files are searched. The old ways (certain environment variables, dynamic conftest.py reading --- a/testing/plugin/test_unittest.py +++ b/testing/plugin/test_unittest.py @@ -81,3 +81,25 @@ def test_module_level_pytestmark(testdir """) reprec = testdir.inline_run(testpath, "-s") reprec.assertoutcome(skipped=1) + +def test_class_setup(testdir): + testpath = testdir.makepyfile(""" + import unittest + import py + class MyTestCase(unittest.TestCase): + x = 0 + @classmethod + def setUpClass(cls): + cls.x += 1 + def test_func1(self): + assert self.x == 1 + def test_func2(self): + assert self.x == 1 + @classmethod + def tearDownClass(cls): + cls.x -= 1 + def test_teareddown(): + assert MyTestCase.x == 0 + """) + reprec = testdir.inline_run(testpath) + reprec.assertoutcome(passed=3) --- a/pytest/plugin/unittest.py +++ b/pytest/plugin/unittest.py @@ -19,51 +19,31 @@ def pytest_pycollect_makeitem(collector, class UnitTestCase(py.test.collect.Class): def collect(self): - return [UnitTestCaseInstance("()", self)] + loader = py.std.unittest.TestLoader() + for name in loader.getTestCaseNames(self.obj): + yield TestCaseFunction(name, parent=self) def setup(self): - pass + meth = getattr(self.obj, 'setUpClass', None) + if meth is not None: + meth() def teardown(self): + meth = getattr(self.obj, 'tearDownClass', None) + if meth is not None: + meth() + +class TestCaseFunction(py.test.collect.Function): + def startTest(self, testcase): pass - -_dummy = object() -class UnitTestCaseInstance(py.test.collect.Instance): - def collect(self): - loader = py.std.unittest.TestLoader() - names = loader.getTestCaseNames(self.obj.__class__) - l = [] - for name in names: - callobj = getattr(self.obj, name) - if py.builtin.callable(callobj): - l.append(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 - if hasattr(self.parent, 'newinstance'): - self.parent.newinstance() - self.obj = self._getobj() - + def addError(self, testcase, rawexcinfo): + py.builtin._reraise(*rawexcinfo) + def addFailure(self, testcase, rawexcinfo): + py.builtin._reraise(*rawexcinfo) + def addSuccess(self, testcase): + pass + def stopTest(self, testcase): + pass def runtest(self): - target = self.obj - args = self._args - target(*args) - - def setup(self): - instance = py.builtin._getimself(self.obj) - instance.setUp() - - def teardown(self): - instance = py.builtin._getimself(self.obj) - instance.tearDown() - + testcase = self.parent.obj(self.name) + testcase(result=self) --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ def main(): name='pytest', description='py.test: simple powerful testing with Python', long_description = long_description, - version='2.0.0.dev17', + version='2.0.0.dev18', url='http://pytest.org', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], _______________________________________________ py-svn mailing list py-svn@codespeak.net http://codespeak.net/mailman/listinfo/py-svn