Python

2012-06-12 29 views
11

'un eski sürümleriyle `unittest.skipIf` kullanma unittest modülüyle feature to skip tests modülünü beğenirim, ancak yalnızca Python 2.7+ sürümünde kullanılabilir.Python

Örneğin, test.py düşünün:

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' 

bir yol için "hile var mı:

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() 

Python önceki bir sürümü olan bir testi çalıştırmak denerseniz, bir hata alıyorum "Python'un eski sürümleri, en dürüst dekoratörü görmezden gelmek ve testi atlamak için mi?

cevap

6

unittest2, Python 2.7'deki en zorlu test çerçevesine eklenen yeni özelliklerin bir arkasıdır. Python 2.4 - 2.7 üzerinde çalışacak şekilde test edilmiştir.

basitçe

Ref unittest2 ithalat ile unittest ithalat yerine yerine unittest ait unittest2 kullanın: Genelde http://pypi.python.org/pypi/unittest2

+0

unittest2 işe yaramasa da tatmin edici değildi,'DeprecationWarning: Bir AddSkip yöntemi kullanılmadan bir TestResult kullanımı onaylanmadı self._addSkip (sonuç, skip_why)' çabucak kaybolmak için. –

1

if ifadesini kullanmaya ne dersiniz?

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

Çözümler bir test atlandı kullanıcıyı uyarır. E.g., 1.325s'de 14 test yaptı. Tamam (SKIP = 1) '. Baskı bildirimi birçok durumu tatmin etmeyebilir. Örneğin, 'nosetests 'kullanırken, baskı ifadesini görmek için' -s' işaretini kullanmanız gerekir. – Aman

4

Ben gerçekten pythonic API değil çünkü unittest kullanılmaması önerilir.

Python'da test için iyi bir çerçeve nose. Örneğin, bir SkipTest özel durum oluşturarak testleri atlayabilirsiniz: Derslere gerekmez

  • :

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

    Bu

    burunda çok daha fazla özellik vardır Python 2.3+ için çalışıyor . Bir fonksiyon da bir test olabilir.

  • Demirbaşlar için dekoratör (kurulum, teardown işlevleri).
  • Modül seviye armatürleri.
  • Özel Durum Bekleyen Dekoratör. `Unittest` veya` nose` ile entegre
  • ...