Unit Test voor Opvragingen

Onze Test omgeving staat klaar. Laten we nu kijken om een te testen klasse op te maken en hierbij een unit test te voorzien. In het volgende hoofdstuk gaan we dieper in op losse koppeling en dit zal zorgen dat onze klassen beter te testen zijn.

Hierbij kan een nieuwe klasse opgemaakt worden die een opvraging zal doen in de databank en een string terug geeft van zijn resultaat. De methode kan er als volgt uitzien.

public static String showBeer(Connection connect) throws SQLException {
        Statement stmt = connect.createStatement();

        ResultSet result = stmt.executeQuery("Select * from Beers Where Id = 1");
        while (result.next()) {
            return result.getString("Name");
        }
        return "";

    }

Het eerste dat opvalt is dat deze methode niet meer verantwoordelijk is voor zijn eigen Connectie. De connectie wordt mee gegeven als parameter en die wordt verder gebruikt. Op deze manier kunnen we de implementatie van onze databank laten veranderen, zonder invloed te hebben op onze code.

Verder vragen we hier het bier op met de ID 1 en geven de naam van dat bier terug.

Om dit te kunnen testen gaan we nu een test methode opbouwen die deze methode aanroept en kijkt of het resultaat overeenkomt met de test databank zijn gegevens en zodoende zijn werk correct doet.

De test kan er dan als volgt uitzien.

    @Test
    void basicTest() throws SQLException{
        Connection connect = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "sa", "");
        String testString = BeerApp.showBeer(connect);
        assertEquals("TestBeer", testString);
        connect.close();
    }

Dit volstaat nu om de test te doen slagen. Het resultaat is uit de test databank genomen en niet uit de echte databank. En deze kan zelf zonder een afhankelijkheid van internet of andere externe bronnen, goed verlopen.

We overlopen dit nu even in de code aan de hand van een demo.