Zum Inhalt springen

JDBC mit JUNIT testen, aber wie ?


zodiacspeeking

Empfohlene Beiträge

Hallo zusammen,

ich habe folgende Frage und bräuchte Tipps dazu:

Ich möchte in JAVA unter Eclipse meine Klasse names DbConnection testen. Die Klasse DbConnection kommuniziert mitttels JDBC-Treiber mit meiner MySQL-Datenbank.

Folgend der Code:

import java.sql.*;


public class Db_connection {


	public static void main(String args[]) {

		String connectionURL = "jdbc:postgresql://localhost:3306/veranstaltungsportal_test;user=root;password=*******";


		try {

			Class.forName("com.mysql.jdbc.Driver");

			Connection con = DriverManager.getConnection(connectionURL);

			Statement stmt = con.prepareStatement("DDL STATEMENT ???"); // createStatement?

			ResultSet rs = stmd

					.executeQuery("SELECT Kurs_ID, Titel FROM veranstaltung");

			while (rs.next())

				System.out.println("Kurs ID=" + rs.getString("Kurs_ID")

						+ " Titel= " + rs.getString("Titel"));

		} catch (SQLException e) {

			e.printStackTrace();

		} finally {

			// Close the connection

			con.close();

		}

	}

}

Da ich bisher schon mit JUnit gearbeitet habe, aber nur AssertEquals-Methoden benutzt habe, bräuchte ich dazu nun einpaar Tipps wie ich die DbConnection testen kann oder prüfen kann ob die Verbindung zustande gekommen ist. Bisher habe ich folgenden Code: (Ich weiß ist nicht großartig viel :bimei)
import static org.junit.Assert.*;


import java.io.IOException;


import org.junit.Test;


public class TestClass {

	public boolean test_Db_connection() {


	}


}

Vielen Dank für die Unterstützung ! :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zodiacspeeking.

Was willst du denn machen? Willst du einen JUnit Test haben, der verschiedene Connections nacheinandern durchprobiert und dir ein true/false zurückliefert? Bzw dir dann per Junit-Erfolgreich oder Fehler eine Rückmeldung liefert?

Wenn nein, dann lass Junit weg und pack deinen Verbindungsaufbau in einen eigenen try-catch block.


try {

	connection = (Connection) DriverManager.getConnection(dbURL,dbUser,dbPw);

	stmt = connection.createStatement();

}catch(Exception e) {

 }

Dann müsste dir e bei einer fehlerhafter Verbindung die entsprechende Fehlermeldung zurückliefern.

Ansonsten musst du ja erstmal quasi eine Testfunktion in deiner Hauptklasse erstellen die die Verbindungsparameter übergeben bekommt auf die du dann testen willst.

Ich hab selbst noch nicht viel mit JUnit gearbeitet, von daher kann ich dir bei der Implementierung nicht wirklich helfen.

edit:

Ich hab mir mal eben meine eigene Beispielimplementierung angeschaut.

public class DeineTestKlasse extends TestCase {

....

}

Soweit ich es verstehe wird JUnit die Ausführung aller deiner Funktionen in dieser Klasse testen und überwachen.

Also könntest du entweder eine Funktion machen , die verschiedene Konfigurationen hat und diese dann durchtestet, oder für jede Verbindung eine eigene Funktion. :)

Bearbeitet von hbspike
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo hbspike,

vielen Dank für deine ausführliche Antwort.

Also erst dachte ich an klassische J-Unit-Tests in einer eigenständigen Klasse, die man TestClass genannt hat, wie oben.

Es ist bei JDBC wohl schwierig die ganzen Parameter mit denen JDBC arbeitet in eine Funktion zu packen die die Werte zurückliefert und die man in der Test-Klasse abrufen kann. Ist halt bisschen blöd.

Wenn hier jemand dazu Ansätze hat, nur her damit ^^

Andererseits hast du auch Recht, dass man in diesem Fall, es auch mit der Exception auffangen könnte. Einfach eine Art Fehlermeldung. Da ich mit Exceptions wenig zu tun gehabt habe, wäre ein Ansatz hier hilfreich.

Vielen Dank !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja die Exception enthällt soetwas wie e.getMessage()

Da wird dann z.B. bei einem Connection refused genau das drinen stehen, also soetwas:

Couldn't connect to database xyz, connection refused. Oder connection timed out.

Bei abgefeuerten SQL Statements habe ich mir meistens immer den ausgeführten sqlString mit ausgegeben.


try {

           connection = (Connection) DriverManager.getConnection(URL,dbUser,dbPw);

           stmt = connection.createStatement();

}catch(Exception p) {

//mache etwas

}

try {

	statement = "Dein Statement";

	stmt.execute(statement );

	rS = stmt.getResultSet();

	    while(rS.next()) {

		   ret = rS.getString(1);

	    }	

	} catch (SQLException e) {

	logger.error("Error - the SQL-Query [" + statement + "] could not be executed!");

	logger.error("Reason :" + e.getMessage());

} 

Dann haste immer eine schöne log-Ausgabe. Alternativ anstelle von log4j(logger) geht natürlich auch ein System.out.println();

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was willst du machen? Willst du deine Klasse JUnit testen oder willst du testen ob du eine Verbindung zu deiner DB bekommst?

JUnit ist nicht dafür gedacht in produktivem Code mit zulaufen, damit testest du nur deinen Code und fertig ist.

Wenn du schauen willst ob du eine Verbindung zu deiner DB hat dann fängst du die SQLException wie du es schon machst. Wenn eine Exception geworfen wird kannst du dir aus der SQLException getErrorCode() den DB spezifischen Error Code geben lassen und dann damit entscheiden was du weiter machst. Also vielleicht nochmal versuchen oder eine weitere Exception werfen die du dann weiter oben verarbeiten kannst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

JUnit ist nicht dafür gedacht in produktivem Code mit zulaufen, damit testest du nur deinen Code und fertig ist.

Wenn du schauen willst ob du eine Verbindung zu deiner DB hat dann fängst du die SQLException wie du es schon machst. Wenn eine Exception geworfen wird kannst du dir aus der SQLException getErrorCode() den DB spezifischen Error Code geben lassen und dann damit entscheiden was du weiter machst. Also vielleicht nochmal versuchen oder eine weitere Exception werfen die du dann weiter oben verarbeiten kannst.

Ihr habt volkommen Recht. Ich werde es mal mit der SQLException probieren. Danke !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...