2013-04-15 16 views
5

Python unittest biçimini kullanarak Python testlerinin benim demet yarattı. Python unittest keşif testleri nasıl sıralanır?

Şimdi

python -m unittest discover -s TestDirectory -p '*.py' -v 

Ben hepsini bulur ve onları çalıştırır bunları çalıştırmak mümkün değilim.

Şimdi orada Windows üzerinde testler ister ince bir fark var, veya Linux üzerinde. Gerçekten de, Windows üzerinde testler alfabetik sırayla yürütülürken, Linux'ta testler, her zaman aynı olsa bile, belirgin bir insana özgü keşfedilebilir düzende yürütülmez.

Sorun, testlerin yürütme sırasını sıralamak için deney dosyasının ilk iki harf dayanıyordu olduğunu. Tabii onlar test çalıştırması günlüğünde ilk görünmesi için kendi çıkışında sürüm verilerini gösteren, belirli bir düzen içinde çalıştırılmak üzere, ancak bilgilendirme testlerin çeşit zorunda.

Linux üzerinde alfabetik sırada da testler yapabileceğimiz bir şey var mı?

+0

Burunları denediniz mi? Nostosest'leri çalıştırmanın doğrudan bir fark yaratacağını merak ediyorum. Keşfedilenleri keşfedemiyorum çünkü burun yazarları bunu gayet iyi yapabilir. bunu denedin mi – CppLearner

+0

Sadece denedim. Testler Linux'ta sıralanıyor gibi görünüyor. Teşekkürler. Ancak, geliştiricilerin burnu takmaya zorlamaktan kaçınmayı ve sadece 'unittest 'ile entegre edilmiş python kullanmamayı tercih ederim. –

+0

Bunu Linux altında benim birim testleri için çalıştırdığımda, bunları aşağıdaki sıraya göre sıralar: ilk olarak, sınama (yöntem) adıyla alt sıraya göre sınıf adına göre alt sıralı dosya veya dizin adıyla. Testler çalışırken, test * isimleri * ilk olarak gösterilir, bu sadece son sübstitüsyon olur ve herhangi bir mantıksal sıralamayla görünmez. Görünüşteki sipariş vermemenizin aslında yukarıdaki dosya/dizin - sınıf - yöntem siparişi olduğunu kontrol etmek istiyorum. – Evert

cevap

0

Bunu denemedim, ama yapabileceği bir şey bir tür işlev eklemek için TestSuite sınıfını geçersiz olduğunu düşünün. Sonra, unittest run işlevini çağırmadan önce sıralama işlevini çağırabilirsiniz. Yani, bir 'AllTests.py' komut dosyasında, şu gibi bir şey ekleyebilirsiniz:

class SortableSuite(unittest.TestSuite): 
    def sort(self): 
     self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName) 
    def run(self,testResult): 
     #or if you don't want to run a sort() function, you can override the run 
     #function to automatically sort. 
     self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName) 
     return unittest.TestSuite.run(self,testResult) 

loader = unittest.TestLoader() 
loader.suiteClass = SortableSuite 
suite = loader.loadTestFromTestCases(collectedTests) 
suite.sort() 
suite.run(defaultTestResult()) 
İlgili konular