Ben JUnit doğru kullanımı (veya en azından belgeleri) çok kafa karıştırıcı buldum. Bu soru hem gelecekteki referans hem de gerçek bir soru olarak hizmet ediyor.
Doğru anladıysam, bir JUnit testi oluşturmak ve çalıştırmak için iki ana yaklaşım vardır:
Yaklaşım A (JUnit 3 stili): TestCase'i genişleten bir sınıf oluşturun ve test yöntemlerini kelimeyle başlatın test
. Sınıfı bir JUnit Testi (Eclipse içinde) test
olarak çalıştırırken , sözcükle başlayan tüm yöntemler otomatik olarak çalıştırılır.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Yaklaşım B (JUnit 4 stili): 'normal' bir sınıf oluşturun ve @Test
yönteme bir açıklama ekleyin . Yöntemi word ile başlatmanız gerekmediğini unutmayın test
.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
İkisini karıştırmak iyi bir fikir gibi görünmüyor, örneğin bu yığın akışı sorusuna bakın :
Şimdi, sorularım:
- Tercih edilen yaklaşım nedir veya ne zaman diğeri yerine birini kullanırsınız?
- B Yaklaşımı, @Test ek açıklamasını olduğu gibi genişleterek istisnalar için test yapılmasına izin verir
@Test(expected = ArithmeticException.class)
. Ancak A yaklaşımını kullanırken istisnaları nasıl test edersiniz? A yaklaşımını kullanırken, bir test paketinde aşağıdaki gibi birkaç test sınıfını gruplayabilirsiniz:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
Ancak bu yaklaşım B yaklaşımıyla kullanılamaz (çünkü her test sınıfı TestCase alt sınıfını içermelidir). B yaklaşımı için testleri gruplandırmanın uygun yolu nedir?
Düzenleme: Her iki yaklaşıma JUnit sürümlerini ekledim
extends TestCase
ve sonra her test@Test
sadece bir şeyleri karıştırmak için açıklama ekledi. :)