Python çerçevesindeki setUp()ve setUpClass()arasındaki fark nedir unittest?
Temel fark (Benjamin Hodgson'un yanıtında belirtildiği gibi), setUpClassyalnızca bir kez çağrılması ve bunun tüm testlerden önce, setUpher 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, setUpyö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.
setUpClassYö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, setUpClassbunun nadiren gerekli olduğunu görüyorum . Bununla birlikte, yukarıdaki örnekleri (veya benzerlerini) test etmek gerekli olduğunda yararlıdır.