Bazen çağıran bir python 2.7 yöntemim var
sys.exit(1)
Doğru koşullar karşılandığında bu kod satırının çağrıldığını doğrulayan bir birim testi yapmak mümkün müdür?
Bazen çağıran bir python 2.7 yöntemim var
sys.exit(1)
Doğru koşullar karşılandığında bu kod satırının çağrıldığını doğrulayan bir birim testi yapmak mümkün müdür?
Yanıtlar:
Evet. sys.exit
yükseltir SystemExit
, böylece kontrol edebilirsiniz assertRaises
:
with self.assertRaises(SystemExit):
your_method()
Örnekleri , önerilen çıkış durumuna ayarlanmış SystemExit
bir özniteliğe code
sahiptir ve tarafından döndürülen bağlam yöneticisi assertRaises
, yakalanan istisna örneğine sahiptir exception
, bu nedenle çıkış durumunu kontrol etmek kolaydır:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception.code, 1)
Python'dan çıkın. Bu,
SystemExit
istisnayı yükselterek uygulanır ... çıkış girişimini bir dış seviyede durdurmak mümkündür.
sys.exit(1)
(diyelim ki, bunun tersine sys.exit(0)
) gerçekten onun code
1 olduğunu iddia etmelisiniz. Sanırım bunu ile yapabilirsiniz assertRaisesRegexp(SystemExit, '1')
?
unittest
bir istisna ve çağrılabilir bir yüklem iletmenize izin veren bir yöntem olduğundan emindim … ama sanırım öyle değil. Düşündüğüm başka bir test modülü var mı?
self.assertRaisesRegex( SystemExit, '^2$', testMethod )
Daha az kod, yeterince okunabilir.
self.assertRaisesRegexp
İşte eksiksiz bir çalışma örneği. Pavel'in mükemmel cevabına rağmen, bunu anlamam biraz zaman aldı, bu yüzden yardımcı olması umuduyla buraya dahil ediyorum.
import unittest
from glf.logtype.grinder.mapping_reader import MapReader
INCOMPLETE_MAPPING_FILE="test/data/incomplete.http.mapping"
class TestMapReader(unittest.TestCase):
def test_get_tx_names_incomplete_mapping_file(self):
map_reader = MapReader()
with self.assertRaises(SystemExit) as cm:
tx_names = map_reader.get_tx_names(INCOMPLETE_MAPPING_FILE)
self.assertEqual(cm.exception.code, 1)
Sorunuzun cevabını Python Birim Testi belgelerinde "İstisnaları Test Etme" aramasında buldum . Örneğinizi kullanırsanız, birim testi aşağıdaki gibi görünecektir:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
İşlevinizi test etmek için gereken tüm bağımsız değişkenleri eklemeyi unutmayın.
Pavel'in mükemmel cevabına ek bir not olarak, test ettiğiniz işlevde sağlanmışsa belirli durumları da kontrol edebilirsiniz. Örneğin your_method()
, aşağıdakileri içeriyorsa, sys.exit("Error")
özellikle "Hata" yı test etmek mümkün olacaktır:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception, "Error")