2012-07-22 31 views
6

Yüzlerce test vakası ile soketleri kullanarak bir modül üzerinde çalışıyorum. Hangisi güzel. Şu anda socket.setdefaulttimeout (60) olan ve olmayan tüm durumları test etmem gerekiyor ... Lütfen bana tüm testleri kesip yapıştırın ve kurulum/yırtılama sırasında varsayılan zaman aşımını ayarlayın/kaldırın.python sürümü var mı?

Dürüst olmak gerekirse, her bir test vakasının kendi başına yapılmasının iyi bir uygulama olduğunu anlıyorum, ama aynı zamanda kendimi tekrarlamaktan da hoşlanmıyorum. Bu gerçekten farklı testlerde değil farklı bir bağlamda test ediyor.

Unittest'in modül düzeyi kurulum/teardown armatürlerini desteklediğini görüyorum, ancak bir test modülümü iki farklı kurulumla iki kez test etmeye nasıl dönüştüreceğim açık değil. Herhangi bir yardım çok takdir edilecektir.

cevap

4

diğer cevaplar çalışabilir Testleri gerçekte birden fazla ortam altında gerçekleştirmeyi mümkün kıldığı ölçüde geçerli, ancak daha fazla kendi kendine yeten bir yaklaşımdan hoşlandığımı düşündüğüm seçeneklerle uğraşırken. Test sonuçlarını organize etmek ve görüntülemek için süitler ve sonuçlar kullanıyorum. İki testi yerine iki testi bir test yapmak için bu yaklaşımı benimsedim - bir TestSuite alt sınıfı oluşturun.

class FixtureSuite(unittest.TestSuite): 
    def run(self, result, debug=False): 
     socket.setdefaulttimeout(30) 
     super().run(result, debug) 
     socket.setdefaulttimeout(None) 
... 
suite1 = unittest.TestSuite(testCases) 
suite2 = FixtureSuite(testCases) 
fullSuite = unittest.TestSuite([suite1,suite2]) 
unittest.TextTestRunner(verbosity=2).run(fullSuite) 
4

böyle yapacağını: Testlerinizin tüm kendi TestCase sınıfından türetmek

  1. Make, en çok SynapticTestCase diyelim. SynapticTestCase.setUp() 'de, soket zaman aşımının ayarlanıp ayarlanmayacağını belirlemek için bir ortam değişkenini inceleyin.

  2. Tüm test paketinizi iki kez, bir kez ortam değişkeni ile ayarladıktan sonra bir kez daha ayarlayın, ardından başka bir şekilde ayarlayın.

  3. Test paketini iki yolla çağırmak için küçük bir kabuk komut dosyası yazın.

+0

Bu kulağa hoş geliyor, ancak hem varsayılan hem de zaman aşımı olmadan otomatik olarak çalıştırılmalıdır. – underrun

+0

Güncelleme: testleri iki yolla çalıştırmak için bir kabuk komut dosyası veya küçük bir Python betiği kullanın. –

1

kodunuzu sonra socket.setdefaulttimeout aramazsa çalıştırabileceğiniz aşağıdaki şekilde test eder:

import socket 
socket.setdeaulttimeout(60) 
old_setdefaulttimeout, socket.setdefaulttimeout = socket.setdefaulttimeout, None 
unittest.main() 
socket.setdefaulttimeout = old_setdefaulttimeout 

Bir kesmek, ama olan bu sorunda

+0

bu, varsayılan zaman aşımıyla test etmek için çalışır, ancak onsuz değil. Testlerin her iki yolunu da – underrun

+0

test etmem gerekiyor. Ardından 'socket.setdefaulttimeout (OTHER_VALUE); unittest.main() 'sonuna kadar. –

İlgili konular