¿Cómo puedo utilizar assertEquals para ver si el mensaje de excepción es la correcta?
Pasa la prueba, pero no sé si pega el error correcto o no.

La prueba estoy corriendo.

@Test
public void testTC3()
{
    try {
    assertEquals("Legal Values: Package Type must be P or R", Shipping.shippingCost('P', -5));
    } 
    catch (Exception e) {
    }        
}

El método que está siendo probado.

public static int shippingCost(char packageType, int weight) throws Exception
{
    String e1 = "Legal Values: Package Type must be P or R";
    String e2 = "Legal Values: Weight < 0";
    int cost = 0;
        if((packageType != 'P')&&(packageType != 'R'))
        {
             throw new Exception(e1);
        }

        if(weight < 0)
        {
             throw new Exception(e2);
        }        
         if(packageType == 'P')
         {
             cost += 10;
         }
         if(weight <= 25)
         {   
             cost += 10;
         }
         else
         {
            cost += 25;
         }
         return cost;       
}

}

Gracias por la ayuda.

OriginalEl autor Meowbits | 2012-04-13

5 Comentarios

  1. 7
    try {
        assertEquals("Legal Values: Package Type must be P or R", Shipping.shippingCost('P', -5));
        Assert.fail( "Should have thrown an exception" );
    } 
    catch (Exception e) {
        String expectedMessage = "this is the message I expect to get";
        Assert.assertEquals( "Exception message must be correct", expectedMessage, e.getMessage() );
    }   
    Gracias! Simple y ha ayudado mucho

    OriginalEl autor Marvo

  2. 4

    La assertEquals en tu ejemplo sería el de comparar el valor de retorno de la llamada al método del valor esperado, que no es lo que usted desea, y, por supuesto, no se que va a ser un valor de retorno si la excepción se produce. Mueva el assertEquals para el bloque catch:

    @Test
    public void testTC3()
    {
        try {
            Shipping.shippingCost('P', -5);
            fail(); //if we got here, no exception was thrown, which is bad
        } 
        catch (Exception e) {
            final String expected = "Legal Values: Package Type must be P or R";
            assertEquals( expected, e.getMessage());
        }        
    }
    No vi tu respuesta, he rehecho mi código, después de leer su respuesta. Gracias!

    OriginalEl autor Nathan Hughes

  3. 1

    Funciona a la perfección para mí.

    try{
        assertEquals("text", driver.findElement(By.cssSelector("html element")).getText());
        }catch(ComparisonFailure e){
            System.err.println("assertequals fail");
        }

    si assertEquals falla ComparisonFailure manejará la

    OriginalEl autor Vladimir Budu

  4. 0

    Java 8 solución

    Aquí es una función de utilidad que escribí:

    public final <T extends Throwable> T expectException( Class<T> exceptionClass, Runnable runnable )
    {
        try
        {
            runnable.run();
        }
        catch( Throwable throwable )
        {
            if( throwable instanceof AssertionError && throwable.getCause() != null )
                throwable = throwable.getCause(); //allows "assert x != null : new IllegalArgumentException();"
            assert exceptionClass.isInstance( throwable ) : throwable; //exception of the wrong kind was thrown.
            assert throwable.getClass() == exceptionClass : throwable; //exception thrown was a subclass, but not the exact class, expected.
            @SuppressWarnings( "unchecked" )
            T result = (T)throwable;
            return result;
        }
        assert false; //expected exception was not thrown.
        return null; //to keep the compiler happy.
    }

    (tomado de mi blog)

    Utilizarlo como sigue:

    @Test
    public void testThrows()
    {
        RuntimeException e = expectException( RuntimeException.class, () -> 
            {
                throw new RuntimeException( "fail!" );
            } );
        assert e.getMessage().equals( "fail!" );
    }

    También, si usted quisiera leer algunas de las razones por debe no quiere assertTrue que el mensaje de la excepción es igual a un valor determinado, ver esto: https://softwareengineering.stackexchange.com/a/278958/41811

    OriginalEl autor Mike Nakis

  5. 0

    Esto es bueno biblioteca que permite hacer valer las excepciones de una manera limpia.

    Ejemplo:

    //given: an empty list
    List myList = new ArrayList();
    
    //when: we try to get the first element of the list
    when(myList).get(1);
    
    //then: we expect an IndexOutOfBoundsException
    then(caughtException())
            .isInstanceOf(IndexOutOfBoundsException.class)
            .hasMessage("Index: 1, Size: 0")
            .hasNoCause();

    OriginalEl autor Jakub Bibro

Dejar respuesta

Please enter your comment!
Please enter your name here