Java Funktionen auf Listen testen

Tron36

Ensign
Registriert
Jan. 2011
Beiträge
212
Hallo Leute,

ich soll mit JUnit eine Funktion testen. Diese Funktion liefert eine Liste
Code:
Liste<String>
kann also nie null sein.
Wie kann ich prüfen, ob die zurücklieferte Liste leer ist oder nicht?

Mit
Code:
assertNotNull
eher nicht, glaub ich.

Ich hoffe ihr Könnt mir helfen.


Lg Tron36
 
Tron36 schrieb:
ich soll mit JUnit eine Funktion testen. Diese Funktion liefert eine Liste
Code:
Liste<String>
kann also nie null sein.

Gegenbeispiel:

public List<String> lol(){
return null;
}

"null" besitzt in Java jeden Typ, daher kann es immer zurückgegeben werden, außer bei primitive types wie int.
 
Nein, da ich, wie eben schon geschrieben, von dir ja wahrscheinlich null erhalten würde.
 
Es ist guter Stil, Methoden, die eine Collection oder ein Array liefern, niemals 'null' zurückgeben zu lassen. Insofern ist der Einwand von F_GXDx unsinnig, da die Methode des TE eben niemals 'null' liefert. Dafür kann und sollte man auch Unit-Tests haben...

@Tron: Du suchst assertTrue oder assertEquals (wenn man sich die Größe ausschauen möchte)
 
Über einen Black-Box-Test dürfte es schwer bis unmöglich sein, zu testen, ob die Funktion garantiert nie null zurückliefert... da ich ansonsten von sinnvollen Tests ausgehe für die Funktion, dürfte jeder Methoden-Aufruf auf der Liste sowieso zum Scheitern der Tests führen, wenn sie doch mal null sein sollte...

Falls eine Methode wirklich mal "nichts" zurückliefern sollte, sollte man über Optional-Container nachdenken.
Ein interessantes Beispiel: Die Java-Map gibt bei einem Aufruf von get null zurück, wenn
a) es keinen Wert zum zugehörigen Schlüssel gibt
b) wenn der zum Schlüssel gehörende Wert null ist

Nicht wirklich toll gemacht, klar, man kann über containsKey prüfen, ob es einen Wert gibt, aber umständlicher ist es dennoch...

Und das null-Literal ist nicht von jedem Typen, sondern vom namenlosen Typen "null type".
 
Zuletzt bearbeitet:
Oh Welt, ... da reden wir schon über Tests, und dann implementieren wir eine offensichtliche Fehlerklasse absichtlich nicht.

Mir ists ja Worscht.
 
F_GXdx schrieb:
Oh Welt, ... da reden wir schon über Tests, und dann implementieren wir eine offensichtliche Fehlerklasse absichtlich nicht.

Könntest Du bitte ausführen, was Du damit meinst?
Ergänzung ()

1668mib schrieb:
Über einen Black-Box-Test dürfte es schwer bis unmöglich sein, zu testen, ob die Funktion garantiert nie null zurückliefert...

Klar, man testet normalerweise, dass die Funktion bei unsinniger Eingabe (oder illegalem State) tatsächlich eine leere Liste zurück gibt. Oder eine Exception wirft. Aber eben niemals nicht 'null' liefert.
 
Kann man das "null" zurückliefern ausschließen?
Man nimmt Äquivalenzklassen und Grenzwerte und hofft, dass es passt... aber ausschließen kann man es ja dennoch kaum...

Meiner Meinung nach hört sich eine explizite Prüfung auf null so an, wie wenn man auch noch getter und setter testet...

Im Übrigen ist nirgends rauszulesen, dass es nicht sogar einen Test gibt, der dies prüft...
Und wenn geprüft wird, ob bei unsinnigen Parametern eine leere Liste zurückkommt, dann ist das im Übrigen eine implizite null-Prüfung... mir geht es hier um das explizite. Das halte ich nicht für notwendig.
 
Zuletzt bearbeitet:
1668mib schrieb:
Kann man das "null" zurückliefern ausschließen?

Im Code schon. Im Test kaum.


1668mib schrieb:
Man nimmt Äquivalenzklassen und Grenzwerte und hofft, dass es passt... aber ausschließen kann man es ja dennoch kaum...

Best effort, klar.

1668mib schrieb:
Meiner Meinung nach hört sich eine explizite Prüfung auf null so an, wie wenn man auch noch getter und setter testet...

Nee, kein Test auf 'null', sondern Test auf leere Liste. Finde ich jetzt nicht so ungewöhnlich, unsinnige Eingaben zu überprüfen.
 
Hab grad noch was reineditiert, was sich eigentlich mit deiner Meinung decken sollte:
"Und wenn geprüft wird, ob bei unsinnigen Parametern eine leere Liste zurückkommt, dann ist das im Übrigen eine implizite null-Prüfung... mir geht es hier um das explizite. Das halte ich nicht für notwendig."
 
1668mib schrieb:
Hab grad noch was reineditiert, was sich eigentlich mit deiner Meinung decken sollte:
"Und wenn geprüft wird, ob bei unsinnigen Parametern eine leere Liste zurückkommt, dann ist das im Übrigen eine implizite null-Prüfung... mir geht es hier um das explizite. Das halte ich nicht für notwendig."

Klar, 'null' steckt wie gesagt implizit mit drin.
 
Zurück
Oben