Hallo zusammen !
Ich habe da mal eine Frage bzgl. der Testbarkeit von diversen selbstimplementierten Methoden in Java. Nun ist der folgende Anwendungsfall sehr leicht mittels JUnit (auch mit diversen Übergabeparametern) zu testen:
Diese Methode bzw. deren Geschäftslogik basiert einzig und alleine darauf, dass eine bestimmte Parameterübergabe erfolgen muss. Ansonsten besitzt diese Methode keinerlei Abhängigkeiten nach außen (auch nicht innerhalb der Klasse, in der sie implementiert ist)
Aber wie gestaltet sich der Sachverhalt nun, wenn folgendes gegeben ist:
Hier existiert eine gewisse Abhängigkeit mit der member variablen "andereKlasse". Auf diese Referenzvariable wird innerhalb der Methode "meineMethode" zugegriffen und somit besteht eine gewisse Abhängigkeit zu der Klasse "MeineAndereKlasse " und dessen Existenz, sowie auch zu der Klasse "MeineKlasse" und deren Existenz. Wenn man so möchte, ist diese Methode nicht vollständig autonom.
Das bedeutet, diese beiden Klassen müssen innerhalb eines Junit Tests manuell von mir erzuegt werden, bevor ich einen JUnit Test für die Methode "meineMethode" überhaupt implementieren kann.
Nun stellt sich mir die Frage, wie ich dieses Problem sauber lösen könnte (auch in Hinblick darauf, dass andere Methoden, die ebenfalls mt JUnit getestet werden sollen, vielleicht noch mehrerer solcher Abhängigkeiten haben könnten.
Spontan würde mir der folgende Lösungsansatz einfallen, welcher allerdings die Anzahl der Übergabeparameter einer Methode sehr schnell erhöhen wird:
Somit würde ich eine gewisse Autonomität und evtl. bessere Testbarkeit für die Methode "meineMethode" erreichen, denn ich müsste zumindest nicht in ein Objekt der Klasse "MeineKlasse" für meinen Jnit Test erzeugen.
Wie kann man generell mit einer solchen Art von Sourcecode umgeben? Wie könnte man ihn besser schreiben? Vor allem, wie könnte man in besser testbar schreiben?
Danke und Gruß
Ich habe da mal eine Frage bzgl. der Testbarkeit von diversen selbstimplementierten Methoden in Java. Nun ist der folgende Anwendungsfall sehr leicht mittels JUnit (auch mit diversen Übergabeparametern) zu testen:
Java:
public class MeineKlasse{
public void meineMethode(String vorname, String nachname, Date geburtsdatum){
// do something
}
}
Diese Methode bzw. deren Geschäftslogik basiert einzig und alleine darauf, dass eine bestimmte Parameterübergabe erfolgen muss. Ansonsten besitzt diese Methode keinerlei Abhängigkeiten nach außen (auch nicht innerhalb der Klasse, in der sie implementiert ist)
Aber wie gestaltet sich der Sachverhalt nun, wenn folgendes gegeben ist:
Java:
public class MeineKlasse{
private MeineAndereKlasse andereKlasse = new MeineAndereKlasse();
// some other java code here
public void meineMethode(String vorname, String nachname, Date geburtsdatum){
List<PersonenRepo> personenRepo = this.andereKlasse.getPersonenRepo;
// do something mit personenRepo
}
}
Hier existiert eine gewisse Abhängigkeit mit der member variablen "andereKlasse". Auf diese Referenzvariable wird innerhalb der Methode "meineMethode" zugegriffen und somit besteht eine gewisse Abhängigkeit zu der Klasse "MeineAndereKlasse " und dessen Existenz, sowie auch zu der Klasse "MeineKlasse" und deren Existenz. Wenn man so möchte, ist diese Methode nicht vollständig autonom.
Das bedeutet, diese beiden Klassen müssen innerhalb eines Junit Tests manuell von mir erzuegt werden, bevor ich einen JUnit Test für die Methode "meineMethode" überhaupt implementieren kann.
Nun stellt sich mir die Frage, wie ich dieses Problem sauber lösen könnte (auch in Hinblick darauf, dass andere Methoden, die ebenfalls mt JUnit getestet werden sollen, vielleicht noch mehrerer solcher Abhängigkeiten haben könnten.
Spontan würde mir der folgende Lösungsansatz einfallen, welcher allerdings die Anzahl der Übergabeparameter einer Methode sehr schnell erhöhen wird:
Java:
public class MeineKlasse{
private MeineAndereKlasse andereKlasse = new MeineAndereKlasse();
// some other java code here
public void meineMethode(String vorname, String nachname, Date geburtsdatum, MeineAndereKlasse andere Klasse){
List<PersonenRepo> personenRepo = andereKlasse.getPersonenRepo;
// do something mit personenRepo
}
}
Somit würde ich eine gewisse Autonomität und evtl. bessere Testbarkeit für die Methode "meineMethode" erreichen, denn ich müsste zumindest nicht in ein Objekt der Klasse "MeineKlasse" für meinen Jnit Test erzeugen.
Wie kann man generell mit einer solchen Art von Sourcecode umgeben? Wie könnte man ihn besser schreiben? Vor allem, wie könnte man in besser testbar schreiben?
Danke und Gruß
Zuletzt bearbeitet: