Test senaryolarında kullanılan "setUp" ve "tearDown" Python yöntemlerini açıklayın


96

Test senaryolarını yazarken Python'un setUpve tearDownyöntemlerinin kullanımını açıklayabilir mi, bunun dışında setUptest yöntemini çağırmadan hemen önce tearDownçağrılır ve çağrıldıktan hemen sonra çağrılır mı?

Yanıtlar:


87

Genel olarak, kurulum için tüm ön koşul adımlarını ve tearDown için tüm temizleme adımlarını eklersiniz.

Sen örneklerle daha fazla bilgi bulabilirsiniz burada .

Bir setUp () yöntemi tanımlandığında, test çalıştırıcısı her testten önce bu yöntemi çalıştırır. Benzer şekilde, bir tearDown () yöntemi tanımlanırsa, test çalıştırıcısı her testten sonra bu yöntemi çağırır.

Örneğin, öğelerin var olmasını veya belirli bir durumu gerektiren bir testiniz var - bu nedenle bu eylemleri (nesne örneklerini oluşturma, db'yi başlatma, kuralları hazırlama vb.) Kuruluma koyarsınız.

Ayrıca bildiğiniz gibi, her testin başladığı yerde durması gerekir - bu, uygulama durumunu ilk durumuna geri yüklememiz gerektiği anlamına gelir - ör. Dosyaları kapatma, bağlantılar, yeni oluşturulan öğeleri kaldırma, işlemleri geri çağırma vb. - tüm bunlar adımlar tearDown'a dahil edilmelidir.

Dolayısıyla fikir, testin kendisinin sonucu almak için yalnızca test nesnesi üzerinde gerçekleştirilecek eylemleri içermesi gerektiğidir; setUp ve tearDown ise test kodunuzu temiz ve esnek bırakmanıza yardımcı olacak yöntemlerdir.

Bir grup test için bir setUp ve tearDown oluşturabilir ve bunları bir üst sınıfta tanımlayabilirsiniz - böylece bu tür testleri desteklemeniz ve genel hazırlıkları ve temizlemeleri güncellemeniz kolay olacaktır.

Kolay bir örnek arıyorsanız, lütfen aşağıdaki bağlantıyı örnekle kullanın


57

Test paketindeki tüm testlerde ortak olan kodu dışarıda bırakmak için bunları kullanabilirsiniz.

Testlerinizde çok sayıda tekrarlanan kodunuz varsa, bu kodu setUp / tearDown'a taşıyarak kısaltabilirsiniz.

Bunu, test verileri oluşturmak için (örn. Sahte / taklitler ayarlamak) veya sahte işlevlerle işlevler ortaya çıkarmak için kullanabilirsiniz.

Entegrasyon testi yapıyorsanız, kurulumda çevresel ön koşulları kontrol et seçeneğini kullanabilir ve herhangi bir şey doğru ayarlanmamışsa testi atlayabilirsiniz.

Örneğin:

class TurretTest(unittest.TestCase):

    def setUp(self):
        self.turret_factory = TurretFactory()
        self.turret = self.turret_factory.CreateTurret()

    def test_turret_is_on_by_default(self):
        self.assertEquals(True, self.turret.is_on())

    def test_turret_turns_can_be_turned_off(self):
        self.turret.turn_off()
        self.assertEquals(False, self.turret.is_on())

17
+1 çünkü 9 satır kod,% 100 sallamak için ihtiyacım olan tek şey. Zarif, özlü örnek. Dürüst olmak gerekirse, bu 9 satır soru dışında sayfada okuduğum tek şey, bu da benim sorumdu. Kod örneğinden önce İngilizce bir şey söylediniz mi? Gerek yoktu! Kod her şeyi söyledi! Teşekkürler Matt.
Nathan C. Tresch

3
Burada "bir şey doğru ayarlanmadıysa testi atlayın" ın nasıl gösterildiğinden emin değilim. Yoksa bu bir kenara mı?
user5359531

6

10 testli bir süitiniz olduğunu varsayalım. Testlerin 8'i aynı kurulum / sökme kodunu paylaşır. Diğer ikisi yok.

kurulum ve sökme, bu 8 testi yeniden düzenlemenin güzel bir yolunu sunar. Şimdi diğer 2 testle ne yapacaksınız? Onları başka bir test senaryosuna / süite taşırsınız. Bu nedenle, kurulum ve sökmeyi kullanmak, testleri vakalara / paketlere ayırmanın doğal bir yolunu da sağlar


1
Bazen testleri başka bir test senaryosuna taşımak istenmez. Bu durumda, kurulum / sökme koduyla bir dekoratör yazabilir ve yalnızca istenen test işlevlerini dekore edebilirsiniz.
Matthijs

2
Bu hiçbir şekilde sorunun cevabı değildir.
2019
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.