2012-06-12 17 views
11

Z modułem unittest, podoba mi się feature to skip tests, ale jest dostępne tylko w Pythonie 2.7+.Używanie `@ unittest.skipIf` ze starszymi wersjami Pythona

Na przykład, rozważmy 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() 

Gdy próbuję uruchomić test z wcześniejszej wersji Pythona, otrzymuję błąd:

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' 

Czy istnieje sposób na „trick "starsze wersje Pythona, aby zignorować architekta Unittest i pominąć test?

Odpowiedz

6

unittest2 to backport nowych funkcji dodanych do unittest test framework w Pythonie 2.7. Został przetestowany pod kątem działania w Pythonie 2.4 - 2.7.

Aby korzystać unittest2 zamiast unittest prostu zastąpić import unittest z importu unittest2

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

+0

unittest2 nie był satysfakcjonujący na moim końcu, chociaż zadziałało, wypluwa ostrzeżenie o przestarzałości, takie jak: 'DeprecationWarning: użycie TestResult bez metody addSkip jest przestarzałe self._addSkip (result, skip_why)' Nie byłem w stanie aby szybko zniknął. –

1

Co powiesz na używanie instrukcji 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

Rozwiązania zintegrowane z '' nose' unittest' albo ostrzeże użytkownika, że ​​test został pominięty. Np .: "Ran 14 testów w 1.325s. OK (SKIP = 1) '. Polecenie print może nie spełniać wielu sytuacji. Na przykład, używając 'nosetests', będziesz musiał użyć flagi' -s', aby zobaczyć instrukcję print. – Aman

4

Ogólnie polecam nie używając unittest ponieważ tak naprawdę nie ma pythonic API.

Dobre ramy do testowania w języku Python to nose. Można pominąć testy podnosząc SkipTest wyjątek, na przykład:

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

Działa to dla Pythona 2.3 lub nowszym

w nosie Istnieje wiele więcej funkcji:

  • Nie potrzeba zajęcia . Funkcja również może być testem.
  • Dekorator dla urządzeń (konfiguracja, funkcje wyłączania).
  • Urządzenia na poziomie modułów.
  • Dekorator dla spodziewającego się wyjątku.
  • ...
Powiązane problemy