Palindrom Test mit Junit

Bobi

Bekanntes Mitglied
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:
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

import org.junit.jupiter.api.Test;


class PalindromPrueferTest {

    @Test
    public void testIstPalindrom() {
        // Erzeuge ein Objekt zum Testen.
        PalindromPruefer einPalindromPruefer = new PalindromPruefer();

      
        /**
        // 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 getestet
        assertThat("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)));
   }
}
 
Die Ausnahme Behandlung schmeißt Fehler.
Welcher Fehler an welcher Stelle? 🙄

Es wird nicht angezeigt, ob den Rest den Test bestanden hat.
Es gibt dann keinen Rest. Wenn eine Assertion fehl schlägt, wird alles danach nicht ausgeführt.
Deshalb auch: Ein Testfall -> eine eigene Methode.

(Und das ist natürlich ein super Beispiel, warum „Kommentare“ im Code oft unnütz sind 😛)
 
Zuletzt bearbeitet:
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.
Java:
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;

import java.util.Scanner;

public class PalindromPruefer {
    String nachricht;
    boolean message = false;
    
    public boolean istPalindrom(String eingabe) {
       
        String strR = "";     
        int lenge = eingabe.length()-1;
         
       if(eingabe==""){
            message = true;
        }
        else {
        for(int i = lenge; i >= 0; i--) {
        strR = strR + eingabe.toLowerCase().charAt(i);
        }
        if(eingabe.toLowerCase().equals(strR)) {
            message = true;
        }
       }
        return message;
    }
} 
[/java]
 
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:
public class Test
{

    public static void main(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 */
true
true
false
Exception 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: 1
BUILD FAILED (total time: 0 seconds)
}
 
Zuletzt bearbeitet:
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.
 
Wie du bereits schriebst:
Java:
if(Wert gleich null)
{
    throw new FehlerExceptionDeinerWahl(Nachricht);
} else
{
    //Dein Code
}
 
Hier ist ganze code, aber funktioniert es trotzdem nicht.
Code:
public class PalindromPruefer {
  
    String eingabe;
  
    public boolean istPalindrom(String eingabe) {
      
        boolean message = false;
        String strR = "";    
        int lenge = eingabe.length()-1;
      
        if (eingabe == null)
        {   // bei throw zeigt eclipse gelbe linie, (dead code)
            throw new IllegalArgumentException("Argument darf nicht null sein.");
        }
        else if(eingabe=="")
                {
                message = true;
                }
        else {
      
        for(int i = lenge; i >= 0; i--) {
        strR = strR + eingabe.toLowerCase().charAt(i);
        }
        if(eingabe.toLowerCase().equals(strR)) {
            message = true;
        }
       }
        return message;
    }
}
 
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 Methode isEmpty() exception zu Ausgeben ist nicht korrekt.
 
mrBrown.
Ich verstehe nicht meine Code.
Hier in diesem Code wie ich versuche Ausnahme zu behandeln aber es funktioniert nicht
Java:
public class PalindromPruefer {
  
    String eingabe;
  
    public boolean istPalindrom(String eingabe) {
      
        boolean message = false;
        String strR = "";    
        int lenge = eingabe.length()-1;
      
        if (eingabe == null)
        {   // bei throw zeigt eclipse gelbe linie, (dead code)
            throw new IllegalArgumentException("Argument darf nicht null sein.");
        }
        else if(eingabe=="")
                {
                message = true;
                }
        else {
      
        for(int i = lenge; i >= 0; i--) {
        strR = strR + eingabe.toLowerCase().charAt(i);
        }
        if(eingabe.toLowerCase().equals(strR)) {
            message = true;
        }
       }
        return message;
    }
}
 

Neue Themen


Zurück
Oben