03
Feb
09

Kasta exceptions!

Tänk på att kasta exceptions!
Det betyder inte att programmet är trasigt och kommer resultera i en katastrof att ett exception kastas. Det innebär att något inte blev som väntat. Det kan tex vara när något hämtas i en databas:
Skapa ett eget exception (kan även vara en ide att låta dina exceptions ärva varandra om det passar sig, SQLException är en bra förebild där)


Public class NoSuchUserException extends Exception{

Public NoSuchUserException(String msg){

Super(msg);

}

}

Sen när användaren hämtas I database:

Public User getUser(int id) throws NoSuchUserException{

Connection con = getConnection();
PreparedStatement p = con.prepareStatement("Select * from Users where id=?”);
p.setInt(1, id);
ResultSet res = p.executeQuery();
if (res.next())
{

return new User(res.getInt("id"), res.getString("userName"), res.getString("password"));

}

else

{


Throw new NoSuchUserException(”No user with id:”+id);

}

}

Alternativet som jag tycker man ser allt för ofta är att iställer returnera null om användaren inte hittas. Det gör att man måste hålla koll på om det är null, vilket man inte tvingas till utan kan glömma och få runtimeExceptions. Null kan även skickas runt lite hursom och även om man garderar sig i den närmaste omgivningen kanske det blir fel några anrop längre bort i kedjan. Att ta hand om exceptions med tydliga namn ger dessutom mycket mer lättförstådd kod.

För att sedan bygga vidare och jUnitTesta så kan följande kod vara ett exempel på ett test för att se att exceptionet kastas som det ska:

@Test
Public void testGetInvalidUser throws Exception

{

try{

User user = getUser(-1)
fail(“borde kastat exception”);

}

catch(NoSuchUserException ex)

{

assertEquals(ex.getMessage, ”No user with id:-1”);

}

}


0 Svar to “Kasta exceptions!”



  1. Kommentera

Lämna en kommentar


Mest klickade

  • Inget