2010-03-14 16 views
10

Ben bir String ayrıştırır ve daha sonra çok sayıda şey kontrol eden bir yapıcı için bir jUnit testi yazıyorum. Yanlış veriler olduğunda, her şey için farklı mesajlara sahip bazı IllegalArgumentException atılır. Bu yüzden bunun için testler yazmak istiyorum, ancak hangi hatanın atıldığını nasıl anlayabilirim? budur bunu nasıl yapabilirim:jUnit farklı durumlarda aynı özel durum

@Test(expected=IllegalArgumentException.class) 
public void testRodneCisloRok(){ 
    new RodneCislo("891415",dopocitej("891415")); 
} 

ve bu olmak istiyorum nasıl, ama nedense bunu yazmak mümkün olup olmadığını bilmiyorum:

@Test(expected=IllegalArgumentException.class("error1")) 
public void testRodneCisloRok(){ 
    new RodneCislo("891415",dopocitej("891415")); 
} 

cevap

4

You' o eski moda şekilde gerçekleştirmeniz gerekiyor:

@Test 
public void testRodneCisloRok() { 
    try { 
     new RodneCislo("891415",dopocitej("891415")); 
     fail("expected an exception"); 
    } catch (IllegalArgumentException ex) { 
     assertEquals("error1", ex.getMessage()); 
    } 
} 

@Test(expected=...) sözdizimi kullanışlı kolaylık, ama birçok durumda çok basit.

İstisna koşulları arasında ayrım yapmak önemliyse, özel olarak yakalanabilecek bir sınıf hiyerarşisi geliştirmeyi düşünebilirsiniz. Bu durumda, IllegalArgumentException'un bir alt sınıfı iyi bir fikir olabilir. Muhtemelen daha iyi bir tasarımdır ve testiniz bu özel istisna tipini yakalayabilir.

32

Eğer JUnit 4.7 veya bu (zarif) şekilde kullanabilirsiniz yukarıda varsa:

@Rule 
public ExpectedException exception = ExpectedException.none(); 

@Test 
public void testRodneCisloRok(){ 
    exception.expect(IllegalArgumentException.class); 
    exception.expectMessage("error1"); 
    new RodneCislo("891415",dopocitej("891415")); 
}