2012-06-12 16 views
11

Con il modulo unittest, mi piace lo feature to skip tests, ma è disponibile solo in Python 2.7+.Uso di `@ unittest.skipIf` con versioni precedenti di Python

Ad esempio, si consideri 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() 

Se provo a eseguire un test con una versione precedente di Python, ottengo un errore:

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' 

c'è un modo per "trucco "versioni precedenti di Python per ignorare il decoratore unittest e saltare il test?

risposta

6

unittest2 è un backport delle nuove funzionalità aggiunte al framework di testing più semplice in Python 2.7. È testato per funzionare su Python 2.4 - 2.7.

Per utilizzare unittest2 invece di unittest è sufficiente sostituire import unittest con importazione unittest2

Rif: http://pypi.python.org/pypi/unittest2

+0

Unittest2 non è stato soddisfacente da parte mia, anche se ha funzionato, emette un avviso di deprecazione come: 'DeprecationWarning: l'uso di un TestResult senza un metodo addSkip è deprecato self._addSkip (risultato, skip_why)' Non ero in grado per farlo sparire rapidamente. –

1

Come utilizzare la dichiarazione if?

if proprietary_module is None: 
    print "Skipping test since it requires proprietary module" 
else: 
    def test_something_proprietary(self): 
     self.assertTrue(proprietary_module is not None) 
+0

soluzioni integrate con unittest' o '' nose' si avverte l'utente che il test è stato saltato. Ad esempio, 'Esegui 14 test in 1.325s. OK (SKIP = 1) '. La dichiarazione di stampa potrebbe non soddisfare molte situazioni. Ad esempio, quando si utilizza 'nosetests', si dovrebbe usare il flag' -s' per vedere la dichiarazione di stampa. – Aman

4

In generale mi sento di raccomandare di non utilizzare unittest perché non ha davvero un API divinatorio.

Un buon framework per il testing in Python è nose. È possibile saltare i test sollevando un'eccezione SkipTest, ad esempio:

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

Questo funziona per Python 2.3 +

ci sono molte più funzioni nel naso:

  • Non hai bisogno di classi . Una funzione potrebbe essere anche un test.
  • Decoratore per infissi (impostazione, funzioni di smontaggio).
  • Infissi a livello di modulo.
  • Decoratore per aspettarsi un'eccezione.
  • ...
Problemi correlati