2012-06-12 16 views
11

Mit dem unittest Modul mag ich die feature to skip tests, aber es ist nur in Python 2.7 + verfügbar.Verwenden von `@ unittest.skipIf` mit älteren Versionen von Python

Betrachten wir zum Beispiel test.py:

import unittest 
try: 
    import proprietary_module 
except ImportError: 
    proprietary_module = None 

class TestProprietary(unittest.TestCase): 
    @unittest.skipIf(proprietary_module is None, "requries proprietary module") 
    def test_something_proprietary(self): 
     self.assertTrue(proprietary_module is not None) 

if __name__ == '__main__': 
    unittest.main() 

Wenn ich versuche, einen Test mit einer früheren Version von Python zu laufen, bekomme ich einen Fehler:

Traceback (most recent call last): 
    File "test.py", line 7, in <module> 
    class TestProprietary(unittest.TestCase): 
    File "test.py", line 8, in TestProprietary 
    @unittest.skipIf(proprietary_module is None, "requries proprietary module") 
AttributeError: 'module' object has no attribute 'skipIf' 

Gibt es eine Möglichkeit, „Trick "ältere Versionen von Python, um den unittest Dekorator zu ignorieren, und den Test zu überspringen?

Antwort

6

unittest2 ist ein Backport der neuen Funktionen, die zum Python 2.7-Test-Framework hinzugefügt wurden. Es wurde getestet, um auf Python 2.4 - 2.7 zu laufen.

Um unittest2 statt Unittest verwenden Sie einfach unittest2

Ref Import Unittest mit Import ersetzen: http://pypi.python.org/pypi/unittest2

+0

unittest2 war nicht zufriedenstellend auf meinem Ende, obwohl es funktionierte, spuckt es eine Verwarnungswarnung aus wie: 'DeprecationWarning: Verwendung eines TestResult ohne eine addSkip-Methode ist veraltet self._addSkip (Ergebnis, Skip_why)' konnte ich nicht um es schnell verschwinden zu lassen. –

1

Wie wäre es mit if Aussage?

+0

Lösungen integriert mit 'unittest' oder' nose' wird den Benutzer warnen, dass ein Test wurde übersprungen. Zum Beispiel "lief 14 Tests in 1.325s. OK (SKIP = 1) '. Die Druckanweisung erfüllt möglicherweise nicht viele Situationen. Wenn Sie beispielsweise "nosetests" verwenden, müssen Sie das Flag "-s" verwenden, um die print-Anweisung anzuzeigen. – Aman

4

Im Allgemeinen würde ich empfehlen unittest nicht verwenden, da es nicht wirklich eine pythonic API hat.

Ein gutes Framework zum Testen in Python ist nose. Sie können Tests überspringen, indem eine SkipTest Ausnahme, zum Beispiel Erhöhung:

if (sys.version_info < (2, 6, 0)): 
    from nose.plugins.skip import SkipTest 
    raise SkipTest 

Dies funktioniert für Python 2.3 +

Es gibt viel mehr Funktionen in die Nase sind:

  • Sie müssen keine Klassen . Eine Funktion könnte auch ein Test sein.
  • Dekorateur für Fixtures (Setup, Teardown-Funktionen).
  • Modulebenenbefestigungen.
  • Decorator für das Erwarten einer Ausnahme.
  • ...
Verwandte Themen