2012-06-25 2 views
8

Nase hat eine bug - Testnamen von Generatoren erstellt werden nicht zwischengespeichert, so scheint der Fehler, wie es im letzten Test passiert ist, nicht der eigentliche Test, wo es fehlgeschlagen ist. Ich habe um sie im Anschluss an die solution im Fehlerbericht Diskussion, aber es funktioniert nur für Namen auf stdout gezeigt, nicht in der XML-Bericht (--with-xunit)Ändern Namen von Tests von Nase Test Generatoren

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 

Der Ausgang der Nase ist wie erwartet, etwas wie

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

Aber die Testnamen in XML sind nur 'testGenerator'.

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

Wie kann ich das ändern, so dass die personalisierte Testnamen sowohl auf stdout und XML-Ausgabe gezeigt werden?

Ich verwende nosetests Version 1.1.2 und Python 2.6.6

+0

Ändern 'Funktions .__ name__' oder 'Funktions .__ doc__' funktioniert nicht. –

+0

Wie wäre es, stattdessen eine Testsuite zu erstellen? – Apalala

+1

@Apalala danke, das scheint, als könnte es lösen. Obwohl ich keine Informationen darüber finden kann, wie man dies in der Nase verwendet und wie es sich mit der Entdeckung von Nasenproben vermischt. Könnten Sie bitte ein Beispiel geben? –

Antwort

4

Sie die Art und Weise verändern können, dass Nose Namen Tests durch adding a plugin die

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) 

Sie describeTest implementiert werden dann auf install this plugin haben und aktiviere es in der Nose-Invokation.

1

Sie können die folgende Zeile hinzufügen.

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

Beispiel:

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 

Diese in den Namen führen Sie wollen.

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

Das funktioniert fast, außer alle Tests bekommen den gleichen Namen für mich (nose 1.2.1, python 2.7.3) – Rog

1

Wie Ananth erwähnt, können Sie dies verwenden.

testGenerator.__name__ 

Sie können dies auch anstelle

testGenerator.compat_func_name 

Wenn Ihre Testklasse Argumente hat, empfehle ich ihnen currying würde, sowie with_setup currying. Die Verwendung von Lambda spart beim Import, und ich denke, es ist ein bisschen sauberer. Zum Beispiel

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 
+0

Guten Ruf beim Curry –

0

Bei der Verwendung von Nase und Eclipe der PyUnit:

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) 

die den Namen schön in PyUnit zu zeigen, als auch verursachen.

Generated test names

Verwandte Themen