2010-03-14 12 views
10

Estoy escribiendo una prueba jUnit para un constructor que analiza un String y luego verifica muchas cosas. Cuando hay datos incorrectos, para cada cosa, se lanza una excepción IllegalArgumentException con un mensaje diferente. Entonces me gustaría escribir pruebas para ello, pero ¿cómo puedo reconocer qué error se produjo? Así es como puedo hacerlo:jUnita la misma excepción en casos diferentes

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

y esto es lo que me gustaría ser, pero no sé si es posible escribir de alguna manera:

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

Respuesta

4

Usted' Tendrá que hacerlo de la manera antigua:

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

la sintaxis @Test(expected=...) es una conveniencia práctica, pero es demasiado simple en muchos casos.

Si es importante distinguir entre las condiciones de excepción, es posible que desee considerar el desarrollo de una jerarquía de clases de excepciones, que se puede capturar específicamente. En este caso, una subclase de IllegalArgumentException podría ser una buena idea. Podría decirse que es un mejor diseño, y su prueba puede detectar ese tipo de excepción específica.

32

Si tiene JUnit 4.7 o superior puede utilizar de esta manera (elegante):

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

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