Ответ 1
Я наблюдал такое же поведение, что unittest.skip, unittest.skipIf и т.д. декораторы не соблюдаются при использовании носа для выполнения моих тестов.
Предложение Bakuriu о написании декоратора, которое вызывает исключение SkipTest в методе setUpClass, устраняет проблему: тесты теперь должным образом пропускаются независимо от того, выполняется ли из unittest.main или из носа.
Вот код, в значительной степени основанный на исходном коде декодера unittest. Ключевыми строками являются те, которые используются при декорировании в классе TestCase:
from unittest import SkipTest, TestCase
import functools
import types
def _id(obj):
return obj
def skip(reason):
"""Unconditionally skip a test."""
def decorator(test_item):
if not isinstance(test_item, (type, types.ClassType)):
@functools.wraps(test_item)
def skip_wrapper(*args, **kwargs):
raise SkipTest(reason)
test_item = skip_wrapper
elif issubclass(test_item, TestCase):
@classmethod
@functools.wraps(test_item.setUpClass)
def skip_wrapper(*args, **kwargs):
raise SkipTest(reason)
test_item.setUpClass = skip_wrapper
test_item.__unittest_skip__ = True
test_item.__unittest_skip_why__ = reason
return test_item
return decorator
def skipIf(condition, reason):
"""Skip a test if the condition is true."""
if condition:
return skip(reason)
return _id