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.exityükseltir SystemExit, böylece kontrol edebilirsiniz assertRaises:
with self.assertRaises(SystemExit):
your_method()
Örnekleri , önerilen çıkış durumuna ayarlanmış SystemExitbir özniteliğe codesahiptir 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,
SystemExitistisnayı 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 code1 olduğunu iddia etmelisiniz. Sanırım bunu ile yapabilirsiniz assertRaisesRegexp(SystemExit, '1')?
unittestbir 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")