Test Umgebung für Datenbank erstellen, was braucht es?

REC

Bekanntes Mitglied
Hallo zusammen

Ich habe schon viel gegoogelt über das Testen mit JUnit. Kann auch normale Junit Test zu normalen Java Klassen schreiben. Da ich mich mehr oder weniger zum ersten mal damit auseinader setzte wollte ich mal meine Situation erklären und hoffe das jemand eine Idee hat wie ich das am besten bewerkstelligen könnte.

Viele Klassen greifen auf DB's und Tabellen zu die auf anderen Server liegen. Aber ich denke das ist nicht das Problem das funktioniert ja(verbindung aufbauen, Sätze schreiben/lese). Das Problem ist eher der Inhalt der Tabellen. Um einen Satz zu erzeugen müssen oft zuerst auf anderen Tabellen Sätze erzeugt werden um überhaupt einen Testsatz in der DB zu erstellen. Das ist oft mühsam und man braucht mehr Zeit für die Testvorbereitung als für den Testcode selbst. Und diese DB sollen nach dem Test wieder im dem Zustand sein wie vor dem Test.

Ich wollte hier mehr sowas wie ein Brainstorming machen und wissen was euch dazu in den Sinn kommt. Also was für Technologien kann ich wie benutzen und wie wende ich diese speziell im zuammenhang mit DB's an.
Zum Beispiel:
- Mockito. Aber dort kann ich einträge nur simulieren, aber ich muss ja wirklich überprüfen ob die Einträge auf der DB sind.
-Oder Blackbox und Whitebox Test was brauche ich eher. Habe bis jetzt immer Blackbox verwendet.
-Oder wäre es sinnvoller eine cleane DB lokal zu installieren und da drauf zu testen?

Ninnt mich einfach mal Wunder was erfahrene JUnit Tester, mir alles rundum JUnit und DB testen erzählen können.
 

BuckRogers

Bekanntes Mitglied
Hi,

eine Möglichkeit wäre ein Intergrationstest. Das geht aber etwas über das Testen der Datenbank hinaus.

Andererseits könntest du dir ein eigenes Testframework bauen welches ein DB Schema erstellt, die Tabellen erstellt, Datensätze hinzufügt. Dann laufen all deine Tests und danach wird das Schema einfach gedroppt.
Eigentlich kein großer Aufwand.


Grüße
 

REC

Bekanntes Mitglied
Danke! genau auf solche Vorschläge habe ich gehofft. Ich werde diesen mal nachgehen.

Ich habe mich auch gefragt ob es ein Tool gibt, um irgendwie bestehende Datensätze in XML zu exportieren um diese Werte dann wieder für den Test einzulesen.
Also ich habe einen DB EIntrag der genau zu meinem Test passt. Um den Test unabhängig zu machen exportiere ich diese Daten in eine XML. Und immer wenn der Test startet dann lädt er diese XML in die DB. ich hoffe es verständlich geschrieben zu haben.
@Edit Haha habe mit DB Unit begonnen und bereits nach dem ersten Absatz steht das dies genau mit diesem Tool möglich ist

@BuckRogers Was meinst du ein DB Schema erstellen? Einfach eine neue Database anlegen und darin all die Tabellen erstellen? Das Problem ist einfach das es zum Teil Tabellen mit 100 Feldern ist. Das kann ich ja nicht schnell erneut eingeben?
 
Zuletzt bearbeitet:

BuckRogers

Bekanntes Mitglied
Hi REC,

Die Spaltenanzahl ist nicht das Problem, sondern die Daten.
Keine neue Datenbank, ein neues Schema mit anderem Namen. Da spielt dein Testframework die Tabellen ein, setzt die neue DataSource für die Testumgebung, ohne Datensätze. Den Dump dafür kannst du ganz easy exportienen und dann verwenden. Die einzelnen Tests beinhalten noch Skripte mit Datensätzen für die Tabellen. Am Ende wird das ganze gedroppt. DBunit sollte dir dabei behilflich sein, wie EasyEagle anmerkte.

Gruß
 

REC

Bekanntes Mitglied
Ok danke dann werde ich mal sowas in der Richtung versuchen. DBUnit habe ich mir angesehen, nicht ganz einfach das Tool überhaupt zu installieren. Man muss ja Maven verwenden. Und damit hatte ich bisher nichts zutun.

Danke für Eure Antworten
 

BuckRogers

Bekanntes Mitglied
Du musst nicht unbedingt Maven verwenden. Dann heißt es aber, dass du deine Abhängigkeiten zu den Bibliotheken selbst definieren und der Applikation zur Verfügung stellen musst. Außerdem willst du ja DBUnit nur zu Testzwecken verwenden. Maven nimmt dir dabei das Management ab. Man kann mit Maven sehr viel konfigurieren und die Abhängigkeiten schnell implementieren. Dich mit Maven auseinanderzusetzen würde dir mit Sicherheit viel nützen. Versuche es einfach mal ;)
 

REC

Bekanntes Mitglied
Entschuldige die Frage aber, auf dieser Seite DbUnit - Downloading dbUnitsteht doch das man maven verwenden muss, oder sonst die "alte" Jar ninnt? Wie bekomme ich den die DBUnit ohen Maven zum laufen?
Oder kann ich mich hier unter "Installation" orientieren wenn ich es ohne Maven laufen lassen will? DBUnit
 

REC

Bekanntes Mitglied
Danke :) super sieht nach dem ersten Überfliegen gut aus der Artikel . Ok dann habe ich nun 2 Möglchkeiten, eine werde ich wohl zum laufen bringen.
 

REC

Bekanntes Mitglied
Sorry ich muss nochmals nachfragen. Ich habe nun dbUnit zum laufen gebracht. Ich kann auch diese XML dataset erstellen lassen. (Leider habe ich es aber mit der jar gemacht anstatt das ganze Maven aufzugleisen ;-) )
Nun ich stelle mir das so vor das ich eine XML exportiere, diese dann so verändern kann wie ich will und diese dann wieder IMPORTIEREN kann.Also in die DB reinschreiben. Einfach um zusehen ob ich datensätze so vorbereiten kann wie ich will. Aber leider funktioniert das nicht. Ich finde allgemein im Web wenig zum Thema inportiern mit DBUnit, daher habe ich langsam das Gefühl falsch verstanden zu haben wie man mit dbUnit arbeitet.
Kann mir jemand mal kurz den Ablauf notieren? Ich habe langsam den Überblick verloren. Oder ich sehe vor lauter Bäume den Wald nicht mehr.
 

REC

Bekanntes Mitglied
Das war der Ursprüngliche satz
Code:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <RPM PMMAND="900" PMID="PM" PPUST="100001" PMSB="os3" PNME="Test AG"/>
</dataset>

Dann verändere ich den Satz so wie ich es gerne hätte. Der name der XMl ist "partialUPDATE.xml"

Code:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <RPM PMMAND="900" PMID="PM" PPUST="100001" PMSB="os3" PNME="Test AG EIn veränderter Datensatz" />
</dataset>

Und habe dann versucht ihn wieder einzulesen:
Java:
       FlatXmlDataSetBuilder xmlDataSetBuilder = new FlatXmlDataSetBuilder();
        IDataSet dataSet = xmlDataSetBuilder.build(new File("partialUPDATE.xml"));
      

        try {
            DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
        } catch (DatabaseUnitException due) {
            throw due;
        } finally {
        }

@Edit Ach ja wenn ich im Debugger nachsehe dann sehe ich in der variable "dataSet" nur AbstractDataSet[_orderedTableNameMap=null]
 
Zuletzt bearbeitet:

REC

Bekanntes Mitglied
Ok ich habe es.
Komischerweise stimmte der Pfad nicht wo ich nach der Datei suchen musste. Die Datei lag im Class Ordner. Darum verwies ich mit dem Pfad auf den Class Ordner dann ging es
 

BuckRogers

Bekanntes Mitglied
Ja das lesen der Exceptions und das Debuggen kann sehr behilflich sein in der Findung der Ursache. Pfadprobleme wirst du noch öfter haben. Vor allem wenn deine App auf verschiedenen Betriebssystemen laufen soll. Da kommt Freude auf ;)

Mit diesen XML-DataSets und FlatXmlDataSetBuilder kenne ich mich leider nicht aus.
Ich handhabe das immer folgendermaßen:

sriptAtStart.sql:
Code:
create schema 'test';
use test;
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
INSERT INTO table_name
VALUES (value1,value2,value3,...);
usw...

dann das ganze im test ausführen:
Java:
@Before
public void prepareTests(){
     // read in the script file and run script in mysql database
...
}

@Test
public void runAllTheTests(){
     // run a test here or more
}

@After
public void tearDown(){
     // drop DB
     // or delete data or do whatever to prepare for new tests etc...
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
W Checkliste Unit Test Allgemeine Java-Themen 17
M Archunit Test Allgemeine Java-Themen 0
O Test schreiben mit Äquivalenzklassen (Aufgabe Prüfung) Allgemeine Java-Themen 9
B Junit Test Allgemeine Java-Themen 8
P Karate API Test läuft nicht durch . initializationError Allgemeine Java-Themen 21
J Junit surefire: enrich test information Allgemeine Java-Themen 0
Gaudimagspam White-Box-Test /Glas Box Test Allgemeine Java-Themen 2
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
S Test mit Werten aus der .properties Allgemeine Java-Themen 4
T Weighted QuickUnion Test Allgemeine Java-Themen 5
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
S Eclipse TestNG Default Test umbenennen Allgemeine Java-Themen 0
F UI Test auf Jenkins Allgemeine Java-Themen 1
looparda Unit Test - Abgänigkeit zur Datenbank isolieren Allgemeine Java-Themen 3
K Test-Frist Programmierung - wie vorgehen Allgemeine Java-Themen 5
E JUnit wie Testergebnisse pro Test ("Test Report") erhalten? Allgemeine Java-Themen 1
R Unit Test Allgemeine Java-Themen 1
M JUnit Test Suites Allgemeine Java-Themen 2
B Hilfe bei JUnit Test Allgemeine Java-Themen 1
E YQL Api Test - NullPointer Allgemeine Java-Themen 9
B JUnit4 Exception-Test Allgemeine Java-Themen 4
A eine test thread.join() frage Allgemeine Java-Themen 2
P Klassen Junit test funktioniert nicht... Allgemeine Java-Themen 11
W Frage zu Klassendesign und Test mit Mockito Allgemeine Java-Themen 5
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
J JUnit, TestCase vs "einfacher" Test Allgemeine Java-Themen 3
1 JUnit Test Suit Allgemeine Java-Themen 2
B Test$1.class mit dem javac compiler Allgemeine Java-Themen 7
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
K Unit Test consolen ein-/ausgaben. Allgemeine Java-Themen 7
DEvent Test JNI Allgemeine Java-Themen 4
S Theorie hinter Shape intersects Test..? Allgemeine Java-Themen 5
fastjack jUnit und Test von equals, hashCode, toString Allgemeine Java-Themen 11
D junit - frage zu fixtures/test suites Allgemeine Java-Themen 11
G JUnit Test Allgemeine Java-Themen 5
K Test-Code in Java-Klassen verstecken (wie mit Precompiler möglich) Allgemeine Java-Themen 10
J GUI Test Allgemeine Java-Themen 4
G Implementierung vom AKS-Test Allgemeine Java-Themen 11
N ClassNotFound Exception bei JUnit Test? Allgemeine Java-Themen 2
GilbertGrape Warum schlägt JUnit-Test fehl? Allgemeine Java-Themen 19
K Bekomme JUnit TEst nicht zum laufen :( Allgemeine Java-Themen 9
G Ant: <test/> Allgemeine Java-Themen 2
F Kasiski-Test in BlueJ Allgemeine Java-Themen 4
H Java Multiplicoice Test (Part 2) Allgemeine Java-Themen 5
H Java Multiplicoice Test (10 Fragen) Allgemeine Java-Themen 11
F Test für Localization Allgemeine Java-Themen 6
B JUnit - Gleichen Test x-mal durchlaufen Allgemeine Java-Themen 2
H References to generic type Test.A<typ> should be param Allgemeine Java-Themen 5
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
B httpunit test Allgemeine Java-Themen 6
S HTTPUnit Test Fehler: Error on HTTP request: 500 Internal Er Allgemeine Java-Themen 9
M Test eines Programmes Allgemeine Java-Themen 4
B Primzahlen test Allgemeine Java-Themen 3
M Welche Umgebung und Frameworks für mich als Umsteiger Allgemeine Java-Themen 6
X Registrierung eines Ecore-Models außerhalb der Eclipse-Umgebung Allgemeine Java-Themen 0
B Ordner öffnen mittels Java in Linux-Umgebung Allgemeine Java-Themen 7
H 2D-Simulation in individuell gestalbarer Umgebung Allgemeine Java-Themen 20
M umgebung funktioniert nicht mehr Allgemeine Java-Themen 14
G java umgebung Allgemeine Java-Themen 2
M Programm funktionier nur aus Entw. Umgebung Allgemeine Java-Themen 2
S Runtime.exec und X Umgebung Allgemeine Java-Themen 2
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben