среда, 25 декабря 2013 г.

@staticmethod in nosetests

Оказывается nosetests 1.2.1 имеет проблемы с обработкой функций обернутых staticmethod декораторами.

При запуске класса он выбрасывает
Traceback (most recent call last):
  File "PYTHON/site-packages/nose/loader.py", line 495, in makeTest
    return self._makeTest(obj, parent)
  File "PYTHON/site-packages/nose/loader.py", line 542, in _makeTest
    return self.loadTestsFromTestCase(obj)
  File "PYTHON/site-packages/nose/loader.py", line 466, in loadTestsFromTestCase
    return super(TestLoader, self).loadTestsFromTestCase(testCaseClass)
  File "PYTHON/unittest.py", line 547, in loadTestsFromTestCase
    testCaseNames = self.getTestCaseNames(testCaseClass)
  File "PYTHON/site-packages/nose/loader.py", line 112, in getTestCaseNames
    cases = filter(wanted, dir(testCaseClass))
  File "PYTHON/site-packages/nose/loader.py", line 111, in wanted
    return sel.wantMethod(item)
  File "PYTHON/site-packages/nose/selector.py", line 175, in wantMethod
    plug_wants = self.plugins.wantMethod(method)
  File "PYTHON/site-packages/nose/plugins/manager.py", line 99, in __call__
    return self.call(*arg, **kw)
  File "PYTHON/site-packages/nose/plugins/manager.py", line 167, in simple
    result = meth(*arg, **kw)
  File "PYTHON/site-packages/nose_unittest/plugin.py", line 25, in wantMethod
    if not issubclass(method.im_class, unittest.TestCase):
  File "PYTHON/site-packages/nose/pyversion.py", line 93, in __getattr__
    return getattr(self._func, attr)
AttributeError: 'function' object has no attribute 'im_class'
 После легкого оборачивания строки 93 из PYTHON/site-packages/nose/pyversion.py узнаем, что именно метод тестового класса, обернутый декоратором staticmethod вызвал проблему. Для меня было не критично и я просто убрал это.