Java'da Birim Testleri oluşturuyorum ve her yöntem için aynı listeleri, değişkenleri vb.Oluşturuyorum. Öte yandan, elbette tüm bu değişkenleri global olarak oluşturabileceğimi ve değerlerini global olarak ayarlayabileceğimi düşündüm. setup()
yöntem (içinde @Before
), ancak çoklu iş parçacığı vb. Nedeniyle testleri çalıştırırken değerlerin değiştirilip değiştirilemeyeceğinden emin değilim. Peki, bu durum için en iyi yol nedir?
Endişelenecek bir şey yok. JUnit, test sınıfınızın yeni bir örneğini oluşturacak ve ardından her birini çalıştıracaktır @Before
yöntemi ve ancak o zaman çalıştırın @Test
yöntem ve bu şarkı ve dans rutinini her biri için tekrar tekrar yapar @Test
bu sınıftaki açıklamalı yöntem. Kullanıyorsun @Before
tam olarak amaçlandığı gibi: Bu test sınıfındaki tüm testler için gerekli olan başlatma kodunu depolamak içindir.
JUnit bu şekilde yapar, çünkü 'test bağımsızlığı' olması güzeldir: Testler, tercihen, bunları gerçekleştirdiğiniz sıralamadan bağımsız olarak başarısız olur veya geçer.
Zaman zaman init süreci o kadar pahalıdır ki, her test için tekrar tekrar çalıştırmanın 'maliyetini' ödemeye değmez. Açıklama @BeforeClass
özellikle bu amaç için var. Javadoc @BeforeClass
bunun test bağımsızlığını tehlikeye attığını ve bu nedenle yalnızca böyle bir yöntem içinde yaptığınız kurulum işi bu uzlaşmayı yapmak için yeterince pahalıysa (hesaplamalı olarak veya başka bir şekilde) kullanılması gerektiğini bile belirtir.
Başka bir deyişle:
Test bağımsızlığı ile ilgili endişeleriniz gerçektir, ancak aşağıdakiler için geçerlidir @BeforeClass
. @Before
bu sorundan muzdarip değil; Bu kod her test için yeniden çalıştırılır.
Not: Eğer varsa tüm bunları pencereden dışarı atabilirsiniz static
şeyler oluyor. Ne yaptığınızı gerçekten bilmediğiniz sürece test kodunda statik şeyler yok. Bu durumda buna sahip olmadığınızı varsayıyorum-devam edin, testleriniz bağımsızdır.
@BeforeClass
ve @Before
. Herhangi bir açıklama pls? @Before
her testten önce çalıştırılır. Tüm yöntemler @BeforeClass
herhangi bir testten önce yalnızca bir kez çalıştırılır. Genel olarak ayarlayın static
ile şeyler @BeforeClass
daha sonra yeniden kullanılır (bu nedenle, testler artık bağımsız değildir). Statik olmayan şeyler ayarladınız @Before
ve böylece testler bağımsızdır. Sadece bu açıklamalar için dokümanları okuyun. @BeforeClass
(Haziran 5: @BeforeAll
) tüm test sınıfı için bir kez çalışır, @Before
(Haziran 5: @BeforeEach
) her bir test yönteminden önce çalışır. @BeforeEach
karşı @BeforeAll
açıklamalarına bakılırsa. Ancak, birden çok sınama tarafından kullanılan listeleri temizlemem gerekip gerekmediğinden emin değilim. Onları içeri boşaltmam gerek. @AfterEach
. Herhangi bir fikir? @Before
ve bazı şeyleri yazdırın - hiçbir şeyi çıkarmadan. Sonra ne oluyor, sadece gözlemlemek. @AfterEach
. Peki, bu durum için uygun yaklaşım nedir?. Herhangi bir fikir? @Before
. Bu noktada hala kafanızı neyin karıştırabileceği hakkında hiçbir fikrim yok. Cevap bunu açıklıyor!