Tüm Birim Testinde aynı değişkenleri kullanmalı mıyım?

0

Soru

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?

java junit junit5 testing
2021-11-23 13:33:22
1

En iyi cevabı

2

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.

2021-11-23 13:38:26

Çok teşekkürler, doğru kullanımı gösteren herhangi bir örnek kod var mı?
rzwitserloot

Ben değil anlamak arasındaki fark @BeforeClass ve @Before. Herhangi bir açıklama pls?
Amadán

tüm yöntemler @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.
rzwitserloot

@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.
rzwitserloot

JUnit5 kullanıyorum, sonra arasındaki farkı görüyorum @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?
avandeursen

Listeyi temizlemeyin. Aynı zamanda bununla biraz oynamanız gerektiği gibi geliyor, çünkü belli ki bir SO cevabı sizin için yeterli değil. Bu iyi bir içgüdü! Sadece.. bazı testler yapın, yalnızca bir kez başlatılan bir listeye bazı öğeler ekleyin @Before ve bazı şeyleri yazdırın - hiçbir şeyi çıkarmadan. Sonra ne oluyor, sadece gözlemlemek.

Evet, oynanabilir, ama bence bu gerçekten yaygın bir durum ve bunun için genel bir yaklaşım olmalı. Bu yüzden, aynı değişkenleri yeniden kullanmak için Birim Test kuralı hakkında açıklığa kavuşturulmam gerekiyor (örneğin, @BeforeEach VEYA @beforeall'da bir kez tanımlamak, değişkenleri temizleyin @AfterEach. Peki, bu durum için uygun yaklaşım nedir?. Herhangi bir fikir?

Kullanmak @Before. Bu noktada hala kafanızı neyin karıştırabileceği hakkında hiçbir fikrim yok. Cevap bunu açıklıyor!

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................