Python çerçevesindeki setUp()
ve setUpClass()
arasındaki fark nedir unittest
?
Temel fark (Benjamin Hodgson'un yanıtında belirtildiği gibi), setUpClass
yalnızca bir kez çağrılması ve bunun tüm testlerden önce, setUp
her testten hemen önce çağrılmasıdır. (Not: Aynısı, yalnızca Python'un değil, diğer xUnit test çerçevelerindeki eşdeğer yöntemler için de geçerlidir unittest
.)
Gönderen unittest
belgeler :
setUpClass()
Tek bir sınıftaki testler çalıştırılmadan önce çağrılan bir sınıf yöntemi. setUpClass, sınıf tek bağımsız değişken olarak çağrılır ve bir sınıf yöntemi () olarak dekore edilmelidir:
@classmethod
def setUpClass(cls):
...
ve:
setUp()
Test fikstürünü hazırlamak için yöntem çağrıldı. Bu, test yöntemi çağrılmadan hemen önce çağrılır; AssertionError veya SkipTest dışında, bu yöntemle ortaya çıkan herhangi bir istisna, bir test başarısızlığından ziyade bir hata olarak değerlendirilecektir. Varsayılan uygulama hiçbir şey yapmaz.
Kurulum neden bir yöntemde diğerine göre yapılsın?
Sorunun bu kısmı henüz cevaplanmadı. Gearon tarafından verilen cevaba cevabımdaki yorumuma göre, setUp
yöntem, tüm testlerde ortak olan fikstür unsurları içindir (bu kodu her testte tekrarlamaktan kaçınmak için). Yinelemenin kaldırılması (genellikle) okunabilirliği artırdığı ve bakım yükünü azalttığı için bunun genellikle yararlı olduğunu düşünüyorum.
setUpClass
Yöntem yerine yalnızca böyle, dosya sistemi üzerinde geçici bir dosya açılırken, bir veritabanı bağlantısı açma test için ortak kitaplığının yüklenmesi vb her test yavaşlayacağını önce böyle şeyler yapmak gibi bir kez yapmak zorunda kalacağını pahalı elemanlar içindir test paketi çok fazla, bu yüzden tüm testlerden önce sadece bir kez yapıyoruz. Bu, testlerin bağımsızlığındaki hafif bir bozulmadır, ancak bazı durumlarda gerekli bir optimizasyondur. Muhtemelen, birim testlerinde böyle şeyler yapılmamalıdır, çünkü genellikle gerçek şeyi kullanmadan veritabanı / dosya sistemi / kitaplık / her neyse alay etmek mümkündür. Bu nedenle, setUpClass
bunun nadiren gerekli olduğunu görüyorum . Bununla birlikte, yukarıdaki örnekleri (veya benzerlerini) test etmek gerekli olduğunda yararlıdır.