2013-01-11 22 views
7

aşağıda dışarıBir burun testi sınıfı için (self) yerine __init __ (self) kullanmak için bir dezavantaj var mı?

class TestTemp(): 

    def __init__(self): 
     print '__init__' 
     self.even = 0 

    def setup(self): 
     print '__setup__' 
     self.odd = 1 

    def test_even(self): 
     print 'test_even' 
     even_number = 10 
     assert even_number % 2 == self.even 

    def test_odd(self): 
     print 'test_odd' 
     odd_number = 11 
     assert odd_number % 2 == self.odd 

baskılar için nosetests -s yayınlanıyor.

__init__ 
__init__ 
__setup__ 
test_even 
.__setup__ 
test_odd 
. 

Testler, testler çalıştırılmadan önce oluşturulur, kurulum sınamadan hemen önce çalışır.

Genel durum için __init__() ve setup() işlevi aynı şeyi yerine getirir, ancak setup()? Yerine __init__() kullanmak için bir dezavantaj mı var? Ya da ikisi de kullanıyor?

cevap

2

setUp yerine __init__ ürününün yerine geçebilir, yazma testleri için stilize edilmiş protokolün bir parçası olduğu için setUp'a yapışmalısınız. Ayrıca, __init__'un yanı sıra, __init__'un bulunmadığı sınıf ve modül düzeyi karşılıklarına sahip olmayan bir tearDown muhatabına sahiptir.

Test sınıfları yazmak, normal sınıflar yazmaktan farklıdır, bu nedenle test sınıflarını yazmak için kullanılan stile yapışmanız gerekir.

+0

Stilize edilmiş bir protokol olan 'setup' kullanılarak' __init__' test sınıfı için herhangi bir durum söz konusu değilse, tutarlılık için daha iyi bir seçim olduğunu kabul ediyorum. –

2

Evet, testler için temiz bir sayfa oluşturmalı ve bireysel testlerinizi izole tutmalısınız. Her bir testten hemen önce setup çağrılırken, test gruplarının (her test için bir tane) bir grupta oluşturulduğu görülür. Kurulumunuzun harici durumu sıfırlaması gerekiyorsa, bunu setup; Bunu __init__ numaralı telefondan yapsaydınız, bireysel testler, test çalışmasının geri kalanı için harici durumu bozabilir.

+2

Bu doğru değil: her sınama için yeni bir sınama örneği oluşturulur, bu yüzden '__init__'' setUp' olduğu sıklıkta çağrılır. –

+0

@NedBatchelder: Yani; Aynı öncül hala, sadece dış devlet için de geçerlidir. Başlıklar için teşekkürler! –

İlgili konular