Hallo Zusammen,
bin mir nicht sicher ob ich mit dem Titel meine Problembeschreibung richtig getroffen habe.
Ich stehe in der Arbeit gerade vor einem Problem.
Versuche es mal kurz zu beschreiben:
Ich habe eine Anwendung programmiert, welche Anfragen an weitere Server stellt .
Meine Anwendung ist ein eigenständig laufendes System und muss, um lauffähig zu sein, hochgefahren werden.
Ich möchte jetzt Anfragen an die anderen Server testen.
Allerdings will ich nicht für den Test meine Anwendung hochfahren (Zieht einen Rattenschwanz mit, dauert seine Zeit, es erfolgen Anfragen an Naming Services, usw...). Ich habe dafür eine simple Client-Klasse geschrieben, die quasi meine komplexe Anwendung simuliert. Diese Clientklasse wird nur zum Testen verwendet.
Funktion des Test: Ist der request an den server erfolgreich und wird der respond richtig zurückgeliefert und verarbeitet.
So jetzt kommen wir zu meinem Problem: )
Die Methode für die serverAnfrage existiert leider jetzt 2 mal und zwar einmal in meiner Anwendung und dann nochmal in den Testklassen mit unterschiedlicher Signatur.
in meiner Anwendung sieht die Methode so aus und der Parameter ServiceAdapter kann nur dann übergeben werden, wenn meine Anwendung läuft:
und in der Testklasse ähnlich nur dass hier der einfache Client übergeben wird
Das ist sehr sehr unschön, da ich einmal quasi mit dem Testclient teste und wenn das dann funktioniert,
wird die Methode getData in meine eigentliche Anwendung kopiert und angepasst mit "ServiceAdapter"
Jetzt meine Frage an euch, wie kann ich das verhindern dass redundanter Code entsteht?
Meine bisherigen überlegungen waren:
a) ein property einführen für Testklasse und einmal für die Anwendungsklasse, ist aber auch nicht so toll, da diese Property in der Anwendung meiner Meinung nach nichts zu suchen hat.
b) das ServiceAdapter-Objekt zu mocken mit einem Mock-Framework, funktioniert bei einfachen Anfragen ganz gut,
aber je komplexer die ServiceAdapter werden (machmal muss man mehrere übergen und es werden mehrere Anfragen an verschiedene Server gestellt) ist das auch nicht mehr optimal
(ich erstelle ein Mock von ServiceAdapter-Objekt und hänge meine ClientServiceAdapter-Objekt dran)
Ich weiß nicht ob jemand, dass verstanden hat und nachvollzogen hat, was ich beschrieben habe, aber ich hoffe mal
Vielleicht hatte jemand sowas änliches schonmal.
Evtl. danke im Voraus
Schöne Grüße
ManInBlack
bin mir nicht sicher ob ich mit dem Titel meine Problembeschreibung richtig getroffen habe.
Ich stehe in der Arbeit gerade vor einem Problem.
Versuche es mal kurz zu beschreiben:
Ich habe eine Anwendung programmiert, welche Anfragen an weitere Server stellt .
Meine Anwendung ist ein eigenständig laufendes System und muss, um lauffähig zu sein, hochgefahren werden.
Ich möchte jetzt Anfragen an die anderen Server testen.
Allerdings will ich nicht für den Test meine Anwendung hochfahren (Zieht einen Rattenschwanz mit, dauert seine Zeit, es erfolgen Anfragen an Naming Services, usw...). Ich habe dafür eine simple Client-Klasse geschrieben, die quasi meine komplexe Anwendung simuliert. Diese Clientklasse wird nur zum Testen verwendet.
Funktion des Test: Ist der request an den server erfolgreich und wird der respond richtig zurückgeliefert und verarbeitet.
So jetzt kommen wir zu meinem Problem: )
Die Methode für die serverAnfrage existiert leider jetzt 2 mal und zwar einmal in meiner Anwendung und dann nochmal in den Testklassen mit unterschiedlicher Signatur.
in meiner Anwendung sieht die Methode so aus und der Parameter ServiceAdapter kann nur dann übergeben werden, wenn meine Anwendung läuft:
Java:
getData(ServiceAdapter adapter, Query query,.....)
{
...
ArrayList<E> dataList = adapter.command(query,....)
//her kommen dann noch komplexere Verarbeitungsschritte, was mit der dataList gemacht wird
...
};
und in der Testklasse ähnlich nur dass hier der einfache Client übergeben wird
Java:
getData(ClientServiceAdapter adapter, Query query,.....)
{
...
ArrayList<E> dataList = adapter.command(query,....)
//her kommen dann noch komplexere Verarbeitungsschritte, was mit der dataList gemacht wird
...
};
Das ist sehr sehr unschön, da ich einmal quasi mit dem Testclient teste und wenn das dann funktioniert,
wird die Methode getData in meine eigentliche Anwendung kopiert und angepasst mit "ServiceAdapter"
Jetzt meine Frage an euch, wie kann ich das verhindern dass redundanter Code entsteht?
Meine bisherigen überlegungen waren:
a) ein property einführen für Testklasse und einmal für die Anwendungsklasse, ist aber auch nicht so toll, da diese Property in der Anwendung meiner Meinung nach nichts zu suchen hat.
b) das ServiceAdapter-Objekt zu mocken mit einem Mock-Framework, funktioniert bei einfachen Anfragen ganz gut,
aber je komplexer die ServiceAdapter werden (machmal muss man mehrere übergen und es werden mehrere Anfragen an verschiedene Server gestellt) ist das auch nicht mehr optimal
(ich erstelle ein Mock von ServiceAdapter-Objekt und hänge meine ClientServiceAdapter-Objekt dran)
Ich weiß nicht ob jemand, dass verstanden hat und nachvollzogen hat, was ich beschrieben habe, aber ich hoffe mal
Vielleicht hatte jemand sowas änliches schonmal.
Evtl. danke im Voraus
Schöne Grüße
ManInBlack
Zuletzt bearbeitet: