SetUp () ve setUpBeforeClass () arasındaki fark


159

JUnit ile birim testi yaparken, iki benzer yöntem vardır setUp()ve setUpBeforeClass(). Bu yöntemler arasındaki fark nedir? Ayrıca, tearDown()ve arasındaki fark tearDownAfterClass()nedir?

İşte imzalar:

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

Yanıtlar:


204

@BeforeClassVe @AfterClassbaşka bir şey çalıştırılır önce, bir bütün olarak testin çok başlangıç ve sonunda - açıklamalı yöntemler test çalışması sırasında tam olarak bir kez işletilecek. Aslında, test sınıfı oluşturulmadan önce çalıştırılırlar, bu yüzden bildirilmeleri gerekir static.

@BeforeVe @Afteryöntemler her test durumu öncesinde ve sonrasında idare edilecek, böylece muhtemelen bir test çalışması sırasında birden çok kez işletilecek.

Sınıfınızda üç testin olduğunu varsayalım, yöntem çağrılarının sırası şöyle olacaktır:

setUpBeforeClass()

  (Test class first instance constructed and the following methods called on it)
    setUp()
    test1()
    tearDown()

  (Test class second instance constructed and the following methods called on it)
    setUp()
    test2()
    tearDown()

  (Test class third instance constructed and the following methods called on it)
    setUp()
    test3()
    tearDown()

tearDownAfterClass()

15

"BeforeClass" ı test durumunuz için statik bir başlatıcı olarak düşünün - bunu statik verileri başlatmak için kullanın - test durumlarınızda değişmeyen şeyler. İş parçacığı için güvenli olmayan statik kaynaklar konusunda kesinlikle dikkatli olmak istiyorsunuz.

Son olarak, "AfterClass" ek açıklama yönteminde yaptığınız tüm kurulumları temizlemek için "AfterClass" ek açıklama yöntemini kullanın (kendi imhaları yeterince iyi değilse).

"Önce" ve "Sonra", birim teste özel başlatma içindir. Genellikle bu yöntemleri bağımlılıklarımı alay etmek / yeniden başlatmak için kullanın. Açıkçası, bu başlatma bir birim testine özgü değildir, ancak tüm birim testlerine geneldir.


BTW birim testi yazmaya başlarsanız blogumdan bu potu tavsiye ederim. Birim testinde diğer harika malzemelere de işaret ediyor: madhurtanwani.blogspot.com/search/label/mock
madhurtanwani

7

setUpBeforeClass, yapıcıdan hemen sonra herhangi bir yöntem yürütülmeden önce çalıştırılır (yalnızca bir kez çalıştırılır)

setUp her yöntem yürütülmeden önce çalıştırılır

tearDown, her yöntem yürütüldükten sonra çalıştırılır

tearDownAfterClass diğer tüm yöntem yürütmelerinden sonra çalıştırılır, yürütülecek son yöntemdir. (yapısökücüyü yalnızca bir kez çalıştırın)


5

Gönderen Javadoc :

Bazen birkaç testin hesaplamalı olarak pahalı kurulumu paylaşması gerekebilir (veritabanına giriş yapmak gibi). Bu testlerin bağımsızlığını tehlikeye atabilirken, bazen gerekli bir optimizasyon olabilir. public static voidNo-arg yöntemiyle açıklama @BeforeClasseklenmesi, sınıftaki herhangi bir test yönteminden önce bir kez çalıştırılmasına neden olur. Üst @BeforeClasssınıfların yöntemleri mevcut sınıftan önce çalıştırılacaktır.


Fark, setUpBeforeClass'ın herhangi bir testten önce çalıştırılması ve bir kez çalıştırılmasıdır; setUp her testten önce bir kez çalıştırılır (ve genellikle test durumunu testler arasında bilinen iyi bir değere sıfırlamak için kullanılır).
Sözdizimi
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.