2010-03-14 6 views
10

Ich schreibe einen jUnit-Test für einen Konstruktor, der einen String analysiert und dann zahlreiche Dinge überprüft. Wenn es falsche Daten gibt, wird für jede Sache eine IllegalArgumentException mit einer anderen Nachricht ausgelöst. Also würde ich gerne Tests dafür schreiben, aber wie kann ich erkennen, welcher Fehler geworfen wurde? Dies ist, wie kann ich es tun:jUnit gleiche Ausnahme in verschiedenen Fällen

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

und das ist, wie ich sein möchte, aber ich weiß nicht, ob es möglich ist, es zu schreiben, irgendwie:

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

Antwort

4

Sie‘ ll Notwendigkeit, es auf die altmodische Art und Weise zu tun:

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

die @Test(expected=...) Syntax ist eine praktische Bequemlichkeit, aber es ist zu einfach, in vielen Fällen.

Wenn es wichtig ist, zwischen Ausnahmebedingungen zu unterscheiden, sollten Sie möglicherweise eine Klassenhierarchie von Ausnahmen entwickeln, die speziell abgefangen werden kann. In diesem Fall könnte eine Unterklasse von IllegalArgumentException eine gute Idee sein. Es ist wohl ein besserer Entwurf und Ihr Test kann diesen speziellen Ausnahmetyp erkennen.

32

Wenn Sie JUnit 4.7 oder höher können Sie diese (elegant) Art und Weise verwendet werden:

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

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