python unittest: не может называть декорированный тест

У меня довольно большой набор тестов, и я украсил некоторые из функций test_ *. Теперь я не могу назвать их ./test.py MySqlTestCase.test_foo_double , python3.2 жалуется, что: ValueError: no such test method in <class '__main__.MySqlTestCase'>: result . Мой код декоратора выглядит так:

 def procedure_test(procedure_name, arguments_count, returns): '''Decorator for procedure tests, that simplifies testing whether procedure with given name is available, whether it has given number of arguments and returns given value.''' def decorator(test): def result(self): procedure = self.db.procedures[self.case(procedure_name)] self.assertEqual(len(procedure.arguments), arguments_count) self.assertEqual(procedure.returns, None if returns is None else self.case(returns)) test(self, procedure) return result return decorator 

и метод испытания:

 @procedure_test('foo_double', 0, 'integer') def test_foo_double(self, procedure): self.assertEqual(procedure.database, self.db) self.assertEqual(procedure.sql, 'RETURN 2 * value') self.assertArguments(procedure, [('value', 'int4')]) 

3 Solutions collect form web for “python unittest: не может называть декорированный тест”

Я думаю, проблема заключается в том, что украшенная функция не имеет одного и того же имени и, кроме того, не удовлетворяет шаблону, который считается тестовым методом.

Использование functools.wrap для украшения decorator должно решить вашу проблему. Дополнительная информация здесь .

Это поможет мне:

 from functools import wraps 

 @wraps(procedure_name) def decorator(test): 

Основываясь на этом сообщении:

Вы можете сделать это следующим образом:

 def decorator(test): def wrapper(self): # do something interesting test(self) # do something interesting wrapper.__name__ = test.__name__ return wrapper 

Это решение имеет два преимущества по сравнению с методом @functools.wrap :

  • ничего не нужно импортировать
  • не требуется знать имя теста при создании декоратора

Благодаря второй возможности этого решения можно создать декораторы для многих тестов.

  • Почему моя идея не работает в python2?
  • Доступ к классу, которому принадлежит украшенный метод от декоратора
  • Flask: Как запустить метод перед каждым маршрутом в проекте?
  • Напоминают, что декораторы не могут memoize (когда не используют синтаксис декоратора)
  • Фланец поражает декоратором до того, как перед сигналом пожарной тревоги
  • Вручную вызывает декоратор, который принимает аргументы
  • Изменить функцию в декораторе
  • Как создать декоратор Python, который можно использовать как с параметрами, так и без них?
  •  
    Interesting Posts for Van-Lav

    Одновременное использование регулярных выражений 'или' и групп захвата

    Выделение синтаксиса Sublime Text для регулярных выражений в утечках python в окружающем коде

    Почему переменная должна быть объявлена ​​глобальной переменной до ее назначения?

    Как удалить кавычки из строки для SQL-запроса в Python?

    \ frac {} {} не будет работать для меня w / pylab

    Странное поведение с операциями numpy array

    Хотя цикл не работает должным образом в Python

    сценарий fruityloops или причина пропеллера из VB или Python?

    Что я делаю не так? Анализ HTML с использованием lxml

    Django-Rest-Framework. Обновление вложенного объекта

    Почему я могу получить доступ к объекту во время его сообщения post_save, но не тогда, когда я запускаю код внутри этого сигнала, который вызывает его в другом процессе

    Преобразовать номер таблицы в колонку

    Для цикла с несколькими условиями в Python

    linearRegression () возвращает список в списке (sklearn)

    Создать почтовый ящик обмена с python

    Python - лучший язык программирования в мире.