Exeptionhandling

Hallo,

ich habe eine Hausaufgabe mit exception Handling.

Meine Tests schlagen fehl, weil die Tests falsche Parametertypen (wie string statt integer) in die Konstruktoren meiner Klassen setzten. Noch eine Erwähnung: Meine Klassen sind durch vererbung miteinander verbunden.

Was ich bis jetzt versucht habe:

Ich habe versucht noch weitere Konstruktoren in den jeweiligen Klassen zu erstellen. Meine Idee war dann dort eine Exeption zu werfen. ZB. sowas:

Java:
Eigentlicher Konstruktor:

public GeschaeftsKunde(String name, int alter, double rabatt) {
		super(name, alter, rabatt);
	}

während der Test so aussieht:

public void testGeschaeftsKundeException1() {
		geschaeftsKundeException = new GeschaeftsKunde("", 17, "");
	}

meine Idee um den Test zu entgehen - ein zweiter Konstruktor in der Geschaeftskunden Klasse:

	public GeschaeftsKunde(String name, int alter, int nam) {
		super(name, alter);
		this.nothing = nothing;
         	throw new IllegalArgumentException("Argument illegal");
	}

Ich versuche es jetzt noch in dem setter setNothing eine exeption zu werfen, aber ich glaube nicht dass das so funktioniert.

Könnt ihr mir weiterhelfen?
 
Zuletzt bearbeitet:

bartzer

Mitglied
Hi,

ich verstehe nicht so ganz was dein Test bewirken soll. Du übergibst String, int, String, hast aber nur einen Konstruktor der String, int, double erwartet. Bzw. hast noch einen Weiteren angelegt der String,int,int erwartet...und wo kommt deine Variable nothing aufeinmal her?
Ich glaube es wäre enorm hilfreich, wenn du mal postest was denn eigentlich gefordert wird.

PS: kann erst morgen wieder antworten
 
Zuletzt bearbeitet:
Ja sorry es sind sehr viele klassen und ein langer text auf ganz vielen Tests.

Das eigentliche Objekt GeschaftsKunde besteht aus (String Name, Int Alter, Double Rabatt). Dieser Test soll anschlagen, wenn die Parameter andere Typen sind. Wie oben besteht das Objekt ja aus (String, Int, String).

Daher hatte ich in meiner Klasse ein weiteres String Attribut erstellt namens Nothing. Ahh jetzt sehe ich was so verwirrend ist. Ich hatte mich verschrieben. So sieht meine Idee aus:

Java:
    public GeschaeftsKunde(String name, int alter, String nothing) {
super(name, alter);
this.nothing = nothing;
throw new IllegalArgumentException("Argument illegal");
}
 
Zuletzt bearbeitet von einem Moderator:

stg

Top Contributor
Das eigentliche Objekt GeschaftsKunde besteht aus (String Name, Int Alter, Double Rabatt). Dieser Test soll anschlagen, wenn die Parameter andere Typen sind. Wie oben besteht das Objekt ja aus (String, Int, String).

Wozu soll das gut sein? Ein solcher Test ist schlichtweg Blödsinn. Test sind dafür da um logische Fehler zu beseitigen, nicht um Compile-Fehler zu finden. Das erledigt ja schon der Compiler für dich. Bzw jede halbwegs brauchbare IDE auch schon vor dem Compile-Vorgang.

Wenn du aber hinter was ganz anderem her bist, dann versuch doch nocheinmal klar zu formulieren, was du eigentlich genau vorhast.

(Merh oder weniger) sinnvoll zu testen wäre z.B., ob das Alter eines Geschäftskunden größergleich 18 ist, oder der Name nicht leer ist (und dann ob dann wirklich eine IllegalArgumentException geworfen wird), nicht aber, ob statt einem double ein String übergeben wurde, denn in dem Fall würde der Code wie schon gesagt nicht einmal compilierbar sein.
 
Ja es ist leider eine Hausaufgabe die ich abgeben muss. Warum das so ist weiß ich nicht. Ich schätze mal die Tests sind dazu da um mich zu ärgern?

Wobei ich das nicht ganz so sinnlos finde. Wenn ich mal weiter denke, z.b. Wir haben ein Programm mit Konsole geschrieben. Was ist wenn jemand sich vertippt und statt des Rabattes ausversehen ein a oder so reintippt?

Ich habe eine OberKlasse namens Person. Dort sind die Attribute Name und Alter hinterlegt.

Rabatt kommt erst in der Geschafts... Klasse. Im Grunde müsste ich nur wissen, wie man prüft, ob der übergebene Parameter dem korrekten Datentyp entspricht.
 

stg

Top Contributor
Nochmal, der Typ einer Variable steht zur Compile-Zeit bereits fest! Da gibt es nichts zu testen.


Wobei ich das nicht ganz so sinnlos finde. Wenn ich mal weiter denke, z.b. Wir haben ein Programm mit Konsole geschrieben. Was ist wenn jemand sich vertippt und statt des Rabattes ausversehen ein a oder so reintippt?

Ist es aber. In die Konsole gibst du z.B. ausschließlich Text ein.
Um einfach mal bei deinem Beispiel zu bleiben: Du gibst in der Konsole nun einen Wert für den Rabatt ein (wohlgemerkt als Text!). Anschließend versuchst du nun den eingegeben Wert als double zu interpretieren (z.B. mittels 'parseDouble' oder Double.valueOf'). Hierbei kann es zu einem Laufzeit-Fehler kommen, wenn der eingebene Wert nicht zu einem double geparst werden kann (etwa weil ausversehen ein a oder so reingetippt wurde).
Ein Anruf des Konstruktors von deiner Klasse Geschäftskunde mit Variablen von einem anderen Datentyp, als gefordert, ist hingegen schlicht nicht möglich, da solche Fehler bereits zur Compile-Zeit feststehen und bemängelt werden.
 

Neue Themen


Oben