JUnit karışıklık: 'uzatmak deneme durumu' veya '@Test'?
Doğru kullanımı (ya da en azından belgeleri) JUnit çok kafa karıştırıcı buldum. Bu soru gerçek bir soru gibi gelecek bir referans olarak hem de hizmet vermektedir.
Eğer doğru anladım ise, ve JUnit test oluşturmak ve çalıştırmak için iki ana yaklaşım vardır:
Yaklaşım (JUnit 3-stili):deneme durumu genişleten bir sınıf oluşturun ve kelime test yöntemleri başlamak test
. JUnit Testi (Eclipse) sınıfı çalışırken, tüm yöntemleri kelime test
ile başlayan otomatik olarak çalışı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);
}
}
B (4 tarzı JUnit) yaklaşım:'normal' bir sınıf ve yöntemi @Test
bir açıklama önüne oluşturabilirsiniz. Kelime test
yöntem başlamak zorunda olduğunu unutmayın.
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);
}
}
İki iyi bir fikir, örneğin this stackoverflow question bakın hiç de öyle olmadığını gördüm karıştırma:
Şimdi, benim soru(s):
- Tercih edilen yaklaşımya da ne zaman başka bir yerine kullanmak istiyorsunuz?
- Yaklaşım B
@Test(expected = ArithmeticException.class)
@Test açıklama gibi uzatarak özel durumlar için test etmek için izin verir.Ama nasıl Bir yaklaşım kullanarak, özel durumlar için test musunuz? Kullanarak Bir yaklaşım, böyle bir test paketi test sınıf grubu:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);suite.addTestSuite(DummyTestAbis.class);Yaklaşım için testler B grubu için doğru yol nedir?
Edit: her iki yaklaşım için JUnit sürümlerini ekledim
CEVAP
Ayrım oldukça basittir:
TestCase
genişletiyor birim testleri JUnit 3 yazılı (tabii hala JUnit 4 desteklenen)@Test
annotation kullanarak yolu JUnit 4 tarafından kullanılmaya başlandı
Genellikle JUnit 3 (ve/veya Java sürümü Java 5'ten) ile uyumluluk çeşitli nedenlerden dolayı gerekli olmadığı sürece açıklama yolunu seçin:
@Test
annotaton daha açık ve araçları (örneğin kolay tüm testler için bu yolu aramak için) destek için daha kolaydır- Birden fazla yöntem 16*/
@BeforeClass
*ve 18*/@AfterClass
*daha fazla esneklik ile açıklamalı olabilir - Entegre beklenen özel durumlar
expected=
kullanarak test edilmesi için destek @Ignored
ek açıklama desteği
3 TestCase
JUnit beklenen özel durumlar için test etmek için metni açık yapmak zorunda kalırdın.
public void testMyException() {
try {
objectUnderTest.myMethod(EVIL_ARGUMENT);
fail("myMethod did not throw an Exception!");
} catch (MyException e) {
// ok!
// check for properties of exception here, if desired
}
}
Çalışan aynı JUnit test durumda farklı...
JUnit: önlemek için nasıl "çalışt...
Nasıl JUnit Test açıklama ile durum me...
Nasıl özel yöntemleri, alanları veya i...
Nasıl birim test soyut sınıflar için: ...