Page 1 of 2
Batchdatei aus Javasoftware starten
Posted: Wed Feb 02, 2011 1:23 pm
by asi
Ich stehe vor dem Problem eine batch Datei aus nem Java Programm heraus zu starten.
Im Internet schon einige "Lösungen" gefunden die aber nicht funktioniert haben.
Eine .exe starten läuft - .bat will nicht - mal wird der Befehl ignoriert, mal bleibt die Software anscheinend stecken und es passiert nichts mehr.
Kann es vielleicht an Windows 7 liegen, dass da Rechte eingeschränkt wurden?
Hintergrund ist, dass ich eine Oracle Datenbank Konfiguration in unzähligen batch Dateien vorliegen habe - ich muss die Software, die die Datenbank benutzt testen und möchte Unit und Gui Tests durchführen und dafür die Datenbank nach jedem Test wieder neu aufbauen.
Möchte die batch Dateien mit SQL anweisungen nicht direkt in Java über JDBC umsetzen müssen.
Hat jemand nen funktionierenden Weg die batch Dateien zu starten oder eine Idee wie ich das Problem sonst lösen kann?
Posted: Wed Feb 02, 2011 2:24 pm
by Aix jongliert mit Nudelhö
öffne sie in cmd.exe, dann kannste immerhin die fehlermeldung lesen
Posted: Wed Feb 02, 2011 4:36 pm
by Enlil
Wenn ich dich richtig verstehe, dann moechtest du zwischen deinen Tests alle Eintraege in der Datenbank loswerden und sogra das Schema loeschen. Die Batchfiles sind da nur Mittel zum Zweck. Richtig?
Ich habe leider sehr wenig Erfahrung mit Unit Tests unter Java, aber unter Ruby gibt es dafuer Datenbankreiniger, die man in der Testkonfiguration einstellt und dann wird zwischen allen Tests die Datanbank gereinigt. Ich bin mir sehr sicher, dass es sowas auch fuer Java gibt, da die Sprache wesentlich weiter verbreitet ist und viele Testkonzepte aus der Javawelt kommen (noch mehr kommen aus Smalltalk, wie fast alles...).
Normalerweise wirft man aber nicht das gesamte Datenbankschema zwischen Tests weg. In Unit Tests will man normalerweise nur testen, dass das Schema richtig ist und nicht die Migrationen. Dafuer wuerde ich spezielle Migrationstests schreiben. Aber die sollten nur in Einzelfaellen notwendig sein. Etwa bei Migrationen die existierende Daten umstrukturieren.
Posted: Wed Feb 02, 2011 4:38 pm
by asi
die .bat selbst läuft sowohl aus explorer heraus auch über cmd ohne probleme.
Nur aus dem Java programm heraus krieg ichs nicht zum laufen - hab da auch verschiedene wege ausprobiert - unter anderem aus java cmd.exe aufgerufen mit dem pfad zur .bat datei
Posted: Wed Feb 02, 2011 4:55 pm
by retroK
Kannst Du vielleicht den Umweg über ein Ant-Skript machen? Also die Bat aus dem Ant Skript aufrufen?
Posted: Wed Feb 02, 2011 4:57 pm
by asi
Enlil wrote:Wenn ich dich richtig verstehe, dann moechtest du zwischen deinen Tests alle Eintraege in der Datenbank loswerden und sogra das Schema loeschen. Die Batchfiles sind da nur Mittel zum Zweck. Richtig?
Ich habe leider sehr wenig Erfahrung mit Unit Tests unter Java, aber unter Ruby gibt es dafuer Datenbankreiniger, die man in der Testkonfiguration einstellt und dann wird zwischen allen Tests die Datanbank gereinigt. Ich bin mir sehr sicher, dass es sowas auch fuer Java gibt, da die Sprache wesentlich weiter verbreitet ist und viele Testkonzepte aus der Javawelt kommen (noch mehr kommen aus Smalltalk, wie fast alles...).
Normalerweise wirft man aber nicht das gesamte Datenbankschema zwischen Tests weg. In Unit Tests will man normalerweise nur testen, dass das Schema richtig ist und nicht die Migrationen. Dafuer wuerde ich spezielle Migrationstests schreiben. Aber die sollten nur in Einzelfaellen notwendig sein. Etwa bei Migrationen die existierende Daten umstrukturieren.
Die batch Dateien führen der Reihe nach SQL Befehle aus die folgendes machen:
Datensatz unloaden in Textdateien, alle Tabellen löschen, alle Tabellen anlegen, Datensatz wieder einlesen und einen Haufen von triggern setzen.
Im Grunde also ja - Schema löschen und wieder herstellen.
Ich weiß nicht ob das so heutzutage noch so üblich ist (ich zweifle etwas) aber der Professor ist schon im Rentenalter.
Getestet werden soll hier aber nicht die Datenbank sondern eine Software die aus einigen controller und entity paaren und ner GUI besteht - da die Software aber fast nichts macht ausser durch die Tabellen zu browsen und Datenbankeinträge zu ändern oder hinzuzufügen, komme ich nicht drumrum die Datenbank anzubinden für sinnvolle GUI Tests (bei den controllern wollte ich mocks benutzen für Überdeckungstests).
Ich wollte zunächst die Datenbank gegen ne freundlichere JavaDB im embedded modus austauschen - die gleichen Tabellen anlegen wäre kein Problem gewesen aber ich hab keine Ahnung wie es mit den Triggern aussieht und ob die genauso umsetzbar sind wie auf der oracle DB - wär blöd wenn sich das Verhalten der Datenbank auf einmal ändern würde.
Deshalb war halt die zweite Idee die bereits vorhandenen Batch Dateien zu benutzen - bisher halt ohne Erfolg.
Datenbankreiniger, die man in der Testkonfiguration einstellt und dann wird zwischen allen Tests die Datanbank gereinigt.
Das klingt sehr gut - gibts da vielleicht n Stichwort nach dem man googlen könnte um sowas zu finden?
Könnte genau das sein was ich brauche.
Posted: Wed Feb 02, 2011 5:05 pm
by asi
retroK wrote:Kannst Du vielleicht den Umweg über ein Ant-Skript machen? Also die Bat aus dem Ant Skript aufrufen?
wir arbeiten meist mit IDEs - deshalb muss ich zu meiner Schande gestehen, dass ich bisher nie mit ant Skripts zu tun gehabt habe und deshalb nicht weiß was damit alles machbar ist.

Wenn alles andere Scheitert, les ich mich da mal schlau.
Danke für den Tip.
Posted: Wed Feb 02, 2011 5:08 pm
by retroK
Hier ein Beispiel wie man ein Bat Skript aus Ant heraus aufruft:
http://ant.apache.org/faq.html#batch-shell-execute
Posted: Thu Feb 03, 2011 5:20 am
by Enlil
asi wrote:Das klingt sehr gut - gibts da vielleicht n Stichwort nach dem man googlen könnte um sowas zu finden?
Könnte genau das sein was ich brauche.
Hab mal das Folgende ergooglet:
http://dbunit.sourceforge.net/
Ob dbUnit gut ist kann ich dir natuerlich nicht sagen. Ich wuere evtl. auch mal ueber die Liste von Java Testframeworks auf Wikipedia gehen:
http://en.wikipedia.org/wiki/List_of_un ... works#Java
Jede Minute die du darauf verbringst dich an ein gutes Testframework zu gewoehnen ist absolut wertvoll verbrachte Zeit. Ich kann mir nicht mehr vorstellen mehr als eine Zeile Code zu schreiben ohne vorher einen passenden Test geschrieben zu haben. Wenn man sich einmal an
Test Driven Development gewoehnt hat, gibt es keinen Weg mehr zurueck zur chaotischen Testfreien Welt. Es erfordert allerdings sehr viel Disziplien das am Anfang durchzuziehen und zu lernen, wie man vernuenftige Tests schreibt. Am Anfang wird jeder nicht triviale Test wesentlich laenger dauern, als das Schreiben des eigentlichen Codes.
Allerdings arbeite mitlwerweile als Berater/Trainer fuer
XP und bin daher etwas voreingenommen.
Posted: Thu Feb 03, 2011 7:12 pm
by asi
Danke, dbunit hab ich gestern auch gefunden - bin mir noch nicht sicher ob ich die Zeit finde mich rein zu arbeiten für diese Hausarbeit, wäre natürlich ein Sahnehäubchen auf der Arbeit - mal schauen wie ich vorankomme, Zeit ist etwas knapp.
Ich hab die Sache mit batch Dateien verworfen - werd die sql statements aus den konfigurationsdateien rauskopieren und als Strings in arrays packen und dann über die Datenbankschnittstelle ausführen lassen.
Allerdings danke nochmal auch an retroKs Tip mit Ant - der hat mich dazu gebracht nochmal ins Skript der Vorlesung rein zu gucken und da das Kapitel über Testautomatisierung genauer unter die Lupe zu nehmen wo unter anderem auch Ant angerissen wird - ich denke wenn die einzelnen Tests - die unter anderem in unterschiedlichen Tools durchgeführt werden - alle fertig sind, werd ich da noch n Ant skript schreiben um diese alle automatisch ausführen zu können.
edit: bin mir nicht 100% sicher da ich keine Zeit verschwenden will das auszutesten aber ich vermute das Ausführen der Batch Dateien wollte nicht klappen, da ich Leerzeichen im Pfad hatte womit cmd.exe Probleme zu haben schien.
Posted: Wed Feb 23, 2011 10:33 pm
by asi
Hab ganz vergessen das Ergebnis mitzuteilen:
Habs am Ende doch mit DBUnit gemacht - nach etwas lesen und ausprobieren hab ich erst mal ne Weile gebraucht um Fehler und fehlende Bibliotheken zu finden usw aber am Ende hats recht gut geklappt.
Die Hausarbeit wurde aus Zeitmangel meiner Meinung nach ein totales Debakel

der Prof hat es trotzdem gelungen gefunden und entsprechend gut bewertet.
Posted: Thu Feb 24, 2011 4:14 am
by Enlil
Danke, dass du uns wissen laesst, wie es ausgegangen ist.
Fan beim naechsten mal frueher mit den Testen an (am besten bevor du den zu testenden Code schreibst). Es ist immer schwerer Code zu testen, der nicht mit Tests im Kopf geschrieben wurde, es sei denn du bist ohnehin ein unglaublich guter und sauberer Programmierer.
Posted: Thu Feb 24, 2011 5:44 am
by asi
In diesem Fall (Wahlfach Softwarequalität) war das Testen, Dokumentation der Tests, Wahl einer Teststrategie usw die Aufgabe - die Software selbst stammt von einem anderen Studenten - nicht von mir.
Wegen anderen Prüfungen sind wir spät angefangen und was als 3 Person Arbeit geplant war blieb zum großen Teil an mir hängen da einer garnicht mehr aufgetaucht ist und der andere leider weder selbstständig, noch sonderlich brauchbar gearbeitet hat.
Das sowas keinen Spaß macht, kannst du dir sicher vorstellen.
Ich hab die Dokumentation der Tests und deren Auswertung so gut wie vollständig auslassen müssen wegen Zeitmangel.
Posted: Thu Feb 24, 2011 5:54 am
by Enlil
Gegen Ende meines Studiums in Deutschland hatte ich endlich genug Disziplin um alle Aufgaben sehr fruehzeitig abzuschliessen, da ich einfach genug hatte von durcharbeiteten Naechten mit einer Frist am naechsten Morgen. Hier in den USA gab's dann andauernd Gruppenaufgaben und jedesmal waren alle anderen Teammitglieder entweder unfaehig oder schlimmer, haben bis zum letzten Moment gewartet, ob nicht ein anderer die Arbeit macht. Ich kam mir da oft vor wie bei diesen Wettbewerben die Gangs in Filmen veranstalten, wo man mit Autos aufeinander zufaehrt und wer zuerst ausweicht verliert. Wer am meisten um die Note/das Projekt besorgt ist, darf all die Arbeit machen. Zum kotzen sowas.
Posted: Tue Mar 01, 2011 8:42 pm
by Katana
Ich wünschte bei uns in der Berufsschule wäre JUnit (oder DBUnit) ein größeres Thema gewesen, so wurde das Thema Softwarequalität allerdings völlig ignoriert.
Mittlerweile programmiere ich nur noch privat mit Java und bin beruflich auf Delphi zurückgefallen. Wenn man von Java verwöhnt ist, ist das echt ein herber Rückschritt!
Es gibt zwar auch Projekte wie DUnit, mit denen man unter Delphi Unit-Tests implementieren kann, allerdings macht das in einem bestehenden, großen Projekt tatsächlich keinen Spaß. Vor allem wenn die Akzeptanz bei anderen Entwicklern gegen 0 tendiert . . .