Hallo!
Ich habe ein Programm geschrieben, welches Palindrom Wörter erkennt und true oder false zurück gibt. wenn ich mit Junit testen will, es funktionieren alle Test außer Test wo die Exception ausgeworfen wird. Aber hier kommt große ABER ich muss Test auskommentieren um bzw. er Junit teste nur erster Fall. Links oben steht dann in Eclipse Runs: 1/1 ob wohl ich viele Tests geschrieben habe. Könnt euch mir helfen bitte.
Danke im Voraus.
Java:
importstaticorg.hamcrest.CoreMatchers.equalTo;importstaticorg.hamcrest.CoreMatchers.is;importstaticorg.hamcrest.MatcherAssert.assertThat;importstaticorg.junit.jupiter.api.Assertions.assertThrows;importorg.junit.jupiter.api.Test;classPalindromPrueferTest{@TestpublicvoidtestIstPalindrom(){// Erzeuge ein Objekt zum Testen.PalindromPruefer einPalindromPruefer =newPalindromPruefer();/**
// Teste die null-Referenz.
Throwable ex = assertThrows(IllegalArgumentException.class, () -> {einPalindromPruefer.istPalindrom(null);});
assertThat("Null-Referenz wurde nicht korrekt verarbeitet.",
ex.getMessage(),
is(equalTo("Argument darf nicht null sein.")));
**/// nur die erste Fall wird getestetassertThat("String der Laenge 5 wurde nicht korrekt verarbeitet.",
einPalindromPruefer.istPalindrom("radara"),is(equalTo(false)));// Teste Zeichenkette der Laenge 0.assertThat("String der Laenge 0 wurde nicht korrekt verarbeitet.",
einPalindromPruefer.istPalindrom(""),is(equalTo(true)));assertThat("String der Laenge 5 wurde nicht korrekt verarbeitet.",
einPalindromPruefer.istPalindrom("Reittier"),is(equalTo(true)));}}
Also ich glaube ich habe Fehler bei der Hauptklasse, wo die Fehler Meldung ausgegeben wird.
Ich verstehe nicht viel von Java, aber ich dachte,
Das ist Haupt klasse, die Lösung ist sehr schmutzig vielleicht macht man nicht so, aber es funktioniert.
kannst du mir bitte sagen wie ich jetzt Ausnahme Behandlung einbauen kann. und dann wie kann ich mit verschiedene Wörter Testen.
a) Boolean message gehört in die Methode istPalindrom rein.
b) Eigentlich brauchst du die Variable message garnicht
c) Palindrom = ein Wort gespiegelt, also sollte man es in der for-Schleife berücksichtigen und
den Anfang von String stets mit dem Ende des Strings Buchstabe für Buchstabe vergleichen, bis man in der Mitte angekommen ist. Ich hoffe, ich drücke mich verständlich aus.
Als Rückgabetyp kannst du auf die Klasseninstanzen der Klasse Boolean zurückgreifen, den diese die Werte Boolean.TRUE und Boolean.FALSE anbietet, wie ich finde, hier kommt es sehr gelegen.
Java:
publicclassTest{publicstaticvoidmain(String[] args){String reittier ="reittier";System.out.println(isPalindrome(reittier));String anna ="Anna";System.out.println(isPalindrome(anna));String peter ="Peter";System.out.println(isPalindrome(peter));String leer ="";System.out.println(isPalindrome(leer));}/** Konsolenausgabe */truetruefalseException in thread "main" java.lang.IllegalArgumentException: isPalindrom: string is empty
at test.test.isPalindrome(test.java:23)
at test.Test.main(test.java:15)C:\Users\...\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53:Java returned:1BUILD FAILED (total time:0 seconds)}
Javinner
teilweise habe ich verstanden was du geschrieben hast.
aber meine Frage wie und wo kann ich Ausnahme Behandlung einbauen, das mein Test nicht mehr Fehler spuckt?
Ich hätte es in die Methode implementiert. Wenn du den String bei der Initialisierung an die Klasse übergibst, dann im Konstruktor. Das Zweite hätte ich jedenfalls vermieden.
Als Rückgabetyp kannst du auf die Klasseninstanzen der Klasse Boolean zurückgreifen, den diese die Werte Boolean.TRUE und Boolean.FALSE anbietet, wie ich finde, hier kommt es sehr gelegen.
Wenn man zwingend Objekte braucht und dabei auch noch (Un-)Boxing vermeiden will, ein sinnvoller Grund dafür fällt mir aber auf die Schnelle nicht ein...
publicbooleanistPalindrom(String eingabe){if(eingabe.isEmpty()){thrownewIllegalArgumentException("String is empty");}else{//An dieser Stelle würde ich den uebergebenen String eingabe//Buchstabe fuer Buchstabe pruefen. Natuerlich bis zur Mitte, weil ja ein Palindrom}}
Javinner.
ich habe zwei test Felle gegeben die unbedingt berücksichtigen soll
Java:
// Teste die null-Referenz.Throwable ex =assertThrows(IllegalArgumentException.class,()->{einPalindromPruefer.istPalindrom(null);});assertThat("Null-Referenz wurde nicht korrekt verarbeitet.",
ex.getMessage(),is(equalTo("Argument darf nicht null sein.")));// Teste Zeichenkette der Laenge 0.assertThat("String der Laenge 0 wurde nicht korrekt verarbeitet.",
einPalindromPruefer.istPalindrom(""),is(equalTo(true)));[/java]Ich glaube mit der MethodeisEmpty() exception zu Ausgeben ist nicht korrekt.