Вы можете просто запустить имя класса, метода или функции с подчеркиванием и носом проигнорирует его.
@nottest
имеет свои применения, но я считаю, что он не работает, когда классы производятся друг от друга, а некоторые базовые классы должны игнорироваться носом. Это происходит часто, когда у меня есть серия подобных Django-представлений для тестирования. Они часто используют характеристики, требующие тестирования. Например, они доступны только пользователям с определенными разрешениями. Вместо того, чтобы писать одну и ту же проверку разрешения для всех из них, я помещаю такой общий тест в начальный класс, из которого производятся другие классы. Проблема состоит в том, что базовый класс существует только для того, чтобы быть полученным более поздними классами и не должен запускаться сам по себе. Вот пример задачи:
from unittest import TestCase
class Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
И выход из носа работает на нем:
$ nosetests test.py -s
Testing something in Base
.Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Base
класс включен в тестах.
Я не могу просто пощекотать @nottest
по адресу Base
, поскольку он будет отмечать всю иерархию. Действительно, если вы просто добавите @nottest
к приведенному выше коду перед class Base
, то нос не проведет никаких тестов.
Что я могу сделать, это добавить подчеркивание перед базового класса:
from unittest import TestCase
class _Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(_Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
и при его запуске _Base
игнорируется:
$ nosetests test3.py -s
Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Такое поведение не очень хорошо документированы, но код, который выбирает тесты explicitly checks for an underscore at the start of class names.
Аналогичный тест выполняется носом по именам функций и методов, поэтому их можно исключить, добавив подчеркивание в начале имени.
Эти downvotes становятся глупыми. –
Почему бы не удалить этот пост и не получить значок «равное давление»? –
Почему это так сильно опущено? Причины неясно. – CaffeineConnoisseur