Vay. Bu gece, unittest
modülünü kullanarak yazılan Python birim testlerinin trace
modülü kapsamındaki kapsama analizi ile iyi oynamadıklarını öğrendim. İşte foobar.py
yılında, mümkün olan en basit birim test var:unittest.py trace.py ile iyi uyum sağlamıyor - neden?
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Yüksek,:
import unittest
class Tester(unittest.TestCase):
def test_true(self):
self.assertTrue(True)
if __name__ == "__main__":
unittest.main()
Ben python foobar.py
ile bu çalıştırırsanız, bu çıktıyı almak. Şimdi de kapsama testi gerçekleştirmek için istiyorum, bu yüzden python -m trace --count -C . foobar.py
ile yeniden çalıştırın, ama şimdi bu olsun:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Hayır, Python, sorun değil - sen benim testi vermedi! trace
bağlamında çalışan bir şekilde unittest
's test algılama mekanizmasını gums gibi görünüyor.
import unittest
class Tester(unittest.TestCase):
def test_true(self):
self.assertTrue(True)
class Insane(object):
pass
if __name__ == "__main__":
module = Insane()
for k, v in locals().items():
setattr(module, k, v)
unittest.main(module)
Bu temelde bunun bir kopyasını taklit yoluyla üst düzey modülünün soyut Birileri adını şeyleştirmesi bir geçici çözüm: İşte ben ile geldi (deli) çözüm. Daha sonra bu adı trace
'un üzerinde bulunan herhangi bir etkiyi yapmak için unittest.main()
numarasına geçebilirim. Size çıktıyı göstermeye gerek yok; Yukarıdaki başarılı örnek gibi görünüyor.
Burada neler oluyor:
Yani, iki sorum var?
trace
nedenunittest
için şeyleri topluyor?Bu sorunu çözmek için daha kolay ve/veya daha az deli bir yol var mı?
Harika bir açıklama, teşekkürler. Test modülüne kendi (dosya) isminin ne olduğunu ve hem kendi başına hem de trace.py altında bir çekicilik gibi çalıştığını söylemem gerek. –
btw: 'unittest.main (= 'testleri' modülü)': 'piton -m Cprofile [some_test_file.py] 'aynı sorun, aynı çözelti sahip olan Cprofile ve unittest kullanmak için çalışıyorum. Arama motorları Cprofile özgü bir şey bulamadık, bu yüzden yorum ekleyerek arama yardım etmeye. –