Изменение имен тестов, созданных генераторами носовых тестов

У носа есть имена ошибок – тестовые имена, созданные генераторами, не кэшируются, поэтому ошибка выглядит так, как в последнем тесте, а не в фактическом тесте, где она не удалась. Я обошел его после решения в обсуждении отчета об ошибке, но он работает только для имен, показанных на stdout, а не в отчете XML (–with-xunit)

from functools import partial, update_wrapper def testGenerator(): for i in range(10): func = partial(test) # make decorator with_setup() work again update_wrapper(func, test) func.description = "nice test name %s" % i yield func def test(): pass 

Выход носа такой, как ожидалось, что-то вроде

 nice test name 0 ... ok nice test name 1 ... ok nice test name 2 ... ok ... 

Но имена тестов в XML – это просто «testGenerator».

 ...<testcase classname="example" name="testGenerator" time="0.000" />... 

Как я могу изменить это, чтобы персонализированные имена тестов отображались как на выводах stdout, так и на XML?

Я использую nosetests версии 1.1.2 и Python 2.6.6

4 Solutions collect form web for “Изменение имен тестов, созданных генераторами носовых тестов”

Вы можете изменить способ тестирования имен носа, добавив плагин, который реализует описание

 from nose.plugins import Plugin class CustomName(Plugin): "Change the printed description/name of the test." def describeTest(self, test): return "%s:%s" % (test.test.__module__, test.test.description) 

Затем вам нужно будет установить этот плагин и включить его в вызове Nose.

Вы можете добавить следующую строку.

testGenerator.__name__ = "nice test name %s" % i

Пример:

 from functools import partial, update_wrapper def testGenerator(): for i in range(10): func = partial(test) # make decorator with_setup() work again update_wrapper(func, test) func.description = "nice test name %s" % i testGenerator.__name__ = "nice test name %s" % i yield func def test(): pass 

Это приведет к именам, которые вы хотите.

 <testsuite name="nosetests" tests="11" errors="0" failures="0" skip="0"><testcase classname="sample" name="nice test name 0" time="0.000" /> 

Как упоминает Анант, вы можете использовать это.

 testGenerator.__name__ 

Вы также можете использовать это вместо

 testGenerator.compat_func_name 

Если у вашего тестового класса есть аргументы, я бы рекомендовал их currying, а также currying with_setup. Использование лямбда экономит на импорте, и я думаю, что это немного чище. Например,

 from nose.tools import with_setup def testGenerator(): for i in range(10): func = with_setup(set_up, tear_down)(lambda: test(i)) func.description = "nice test name %s" % i testGenerator.compat_func_name = func.description yield func def test(i): pass def set_up(): pass def tear_down(): pass 

При использовании носа и PyUnit Eclipe:

 import nose class Test(object): CURRENT_TEST_NAME = None def test_generator(self): def the_test(*args,**kwargs): pass for i in range(10): # Set test name Test.CURRENT_TEST_NAME = "TestGenerated_%i"%i the_test.description = Test.CURRENT_TEST_NAME # Yield generated test yield the_test,i # Set the name of each test generated test_generator.address = lambda arg=None:(__file__, Test, Test.CURRENT_TEST_NAME) 

что приведет к тому, что имя будет хорошо отображаться в PyUnit.

Сгенерированные имена тестов

 
Interesting Posts for Van-Lav

python opencv imwrite … не могу найти параметры

Библиотека, подобная коллекции Python. Библиотека Counter для C # -> Получение разницы между значениями между двумя объектами словаря в C #

Круглый с половиной даже на десятичной

График в реальном времени matplotlib не работает, пока он все еще находится в цикле

Python или awk / sed для очистки данных

Тестирование, если установлено, является подмножеством, учитывая число (кратность) каждого элемента в множестве

Повторное выражение поиска Python из переменной внутри списка

Возможно ли перегрузить синтаксис множественного сравнения в python?

Использование gevent monkey patching с резьбой делает работу нити серийно

Вывод командной строки перенаправления в окно сгенерированное питоном

Инструмент / библиотека для расчета интервалов, таких как «последний четверг месяца»

Связывание Python Selenium с браузером TOR

Распределенный менеджер блокировки для Python

Django Imagekit обрабатывает исходное изображение

Динамические аргументы по умолчанию в функциях python

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