Change names of tests created by nose test generators
generator, nose, nosetests, python, unit-testing
Solution
You can change the way that Nose names tests by adding a plugin that implements describeTest
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)
You will then have to install this plugin, and enable it in the Nose invocation.
Problem
Nose has a bug - test names created by generators are not cached, so the error looks like it happened in the last test, not the actual test where it failed. I got around it following the solution in the bug report discussion, but it only works for names shown on stdout, not in the XML report (--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 ``` The output of nose is as expected, something like ``` nice test name 0 ... ok nice test name 1 ... ok nice test name 2 ... ok ... ``` But the test names in XML are just 'testGenerator'. ``` ...<testcase classname="example" name="testGenerator" time="0.000" />... ``` How can I change this so that the personalized test names are shown on both stdout and XML output? I'm using nosetests version 1.1.2 and Python 2.6.6