J-Unit Tests

JavaNoob13

Mitglied
Hallo Leute :)
Habe ein wenig Schwierigkeiten mich in das Thema J-Unit-Tests hinein zu arbeiten. Hatte es bisher noch nie gemacht und auch nicht so wirklich richtige Beispiele dazu gesehen. (Achja Programmierumgebung ist übrigens BlueJ).

Habe einen Quelltext eines Zahlensystemzählers, dem im Konstruktor Paremeter für die Anzahl der Stellen, sowie ein Wert für die Basis mitgegeben wird. (Bsp: Basis 2 = Binärsystem, Basis 10 = Dezimal usw...). Es wird also ein Array der Länge legth initialisiert, indem erst mal alle Startwerte = 0 sind und die Basis wird als Variable gespeichert. Die Länge des Arrays ,sowie die Basis müssen größer als 1 sein, ansonsten soll eine Fehlermeldung erscheinen.

Nun gibt es noch eine Methode, in der als Parameter eine Positin angegeben werden soll, die genau um den Wert 1 erhöht wird. Überschreitet der Wert der Position bei diesem Schritt die Basis-Wertemenge, so soll die nächst höher wertige Stelle um den Wert 1 erhöht werden und die restlichen Stellen auf 0 gesetzt. Als Rückgabewert soll die Stelle ausgegeben werde, die erhöht wurde.(Quellcode unten)

Nun will ich diese Methode mittels J-Unit testen, ich weiß aber nicht genau was ich dort testen muss und schon gar nicht wie ich sowas umsetzen kann. Ich weiß, dass in BlueJ eine Tester-Klasse erstellt werden kann und diese bestimmte Tester- Methoden beinhaltet, das ist aber auch schon alles.
Wäre euch sehr verbunden, wenn ihr mir da ein paar Ansätze geben könntet wie so ein Test als Quellcode eingegeben werden muss und wie dabei vorgegangen wird. Da mir immer wieder gesagt wurde, dass das Testen von Programmen unausweichlich ist und deshalb einen hohen Stellenwert beim Programmieren beinhaltet, wäre ich sehr interessiert daran dies in Zukunft effizient umsetzen zu können.


Hier der Quellcode der Klasse Counter, in der der Zähler implementiert wurde:
Java:
public class Counter
{
    // instance variables - replace the example below with your own
    private int base,length;
    private int[] array;
    

    /**
     * Constructor for objects of class Counter
     */
    public Counter(int base, int length)
    {
        array = new int[length];
        this.base = base;
        
        if(length < 1) {
          throw new IllegalArgumentException( "Länge muss größer als 1 sein" );
          }
        if(base < 2) {
          throw new IllegalArgumentException( "Basis muss mindestens 2 sein" );
        }
    }

 public int inc (int pos) {
       if(pos < 0) {
          throw new IllegalArgumentException( "Out of Bounds" );
        }        
        
       if(pos > length) {
          throw new IllegalArgumentException( "Out of Bounds" );
        }   
       
        if (array[pos] == base-1 ) {      //Sobald der größte zugelassene Wert erreicht ist
               if(pos == array.length-1) {//An der letzten Stelle des Array
               
                   for(length = 0; length < array.length; length++) {
                   array[pos] = 0;        //Setze den Wert auf 0
                  
               }
        }
        //Falls nicht an der letzten Stelle, übertrag wird eine Position weiter geschoben      
                else {
                   array[pos+1] += 1;
                   }
        }
        //Falls der größte zugelassene Wert noch nicht erreicht ist, erhöhe um 1    
                else {
                array[pos] +=1;
        }
        //Überprüft, ob der Übertrag an einer Stelle zu groß ist
        for(length = 0; length < array.length; length++) {
           //Falls Übertrag der letzten Stelle zu groß, setzte den Wert auf 0
           if(array[length] == base && length == array.length) {
               
               array[length] = 0;
           }
           //Falls nicht an der letzten Stelle, erhöhe nächste Stelle um 1 und ziehe der aktuellen
           //Stelle 1 ab
           if(array[length] == base && length < array.length) {
             array[length] -= 1;
             array[length+1] += 1;
           }
        }
        
        return pos;
   }

Außerdem habe ich noch eine Methode, die mir die Arraywerte zurück gibt.
Mit freundlichen Grüßen
javaNoob13
 

rme

Top Contributor
Hallo :)

Finde ich super, dass du dich selbständig in solche Themen einarbeiten möchtest. Leider kenne ich BlueJ nicht - kannst du folgenden Code dort zum Laufen bringen? Falls ja, könnten wir dann weiter schauen, wie man deine Klasse testen kann :)

Java:
import static org.junit.Assert.*;

import org.junit.Test;

public class IncTest {

    @Test
    public void test() {
        assertTrue("Inkrementieren sollte um 1 erhoehen", 2 + 1 == 3);
    }

}
 
Zuletzt bearbeitet:

JavaNoob13

Mitglied
Danke für die Antwort schonmal :)!
Also wenn ich das so eingebe und ausführe steht auf jeden Fall da "test succeeded". Bei mir sieht das ganze jetzt also folgendermaßen aus:

Java:
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * The test class CounterTest.
 *
 
 */
public class CounterTest
{
    /**
     * Default constructor for test class CounterTest
     */
    public CounterTest()
    {
       
    }

     @Test
    public void test() {
        assertTrue("Inkrementieren sollte um 1 erhoehen", 2 + 1 == 3);
    }
}

Wie kann ich das jetzt auf meine Counter Klasse übertragen? Ist ja noch nichts verbunden irgendwie, oder? Sorry wie man sieht kenn ich mich einfach gar nicht damit aus :(.
 

rme

Top Contributor
Sorry für die späte Antwort, irgendwie habe ich nach deinem Beitrag keine Mail-Benachrichtigung bekommen und ihn deshalb nicht bemerkt :/

Das Testen ansicht funktioniert also auch unter BlueJ, das ist schonmal sehr gut. Du kannst in der mit @Test annotierten Methode nun eine Instanz deiner Klasse erzeugen und damit arbeiten. Beispielsweise könntest du ein Array mit einer Zahl bereitstellen, inkrementieren lassen und mit einem per Hand ausgerechneten Array vergleichen. Sinnvoll ist es, besonders die Randfälle zu testen, also solche, wo möglichst viel oder möglichst wenig Arbeit passiert.

Zum Vergleichen mit dem erwarteten Ergebnis gibt es diese assert-Methoden. Es gibt beispielsweise assertArrayEquals, um zwei Arrays miteinander zu vergleichen. Wenn der Vergleich fehlschlägt, bekommst du eine Nachricht darüber. Hier ist eine Übersicht, welche assert-Methoden es so gibt:

Assert (JUnit API)

turtle hat einen ausführlichen Beitrag zum Testen geschrieben, schau dir den mal an: TDD - Java-Forum.org :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Open Source Projekt mit Unit Tests gesucht Java Basics - Anfänger-Themen 5
T Unit tests fehlerhaft bitte um hiiiiilfe :D Java Basics - Anfänger-Themen 1
J Unit Testing mit vielen Bedingungen - Best Practice? Java Basics - Anfänger-Themen 9
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
U Best Practice Datenbereitstellung Unit Test Java Basics - Anfänger-Themen 6
V Mediaplayer - NullPointerException bei Unit-Test Java Basics - Anfänger-Themen 4
cowabunga1984 Unit-Testing - Welche Testfälle sind relevant? Java Basics - Anfänger-Themen 4
6 Best Practice Feedback zu Service / JUnit Tests Java Basics - Anfänger-Themen 3
M Anfängerfehler - Tests JUnit IntelliJ Java Basics - Anfänger-Themen 24
M Assertions Tests Java Basics - Anfänger-Themen 6
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
T gradle und tests Java Basics - Anfänger-Themen 1
W JUnit Tests Java Basics - Anfänger-Themen 4
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
L JUnit tests in java Java Basics - Anfänger-Themen 5
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
L Junit Tests Java Basics - Anfänger-Themen 10
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
G JUnit-Tests im Programmdurchlauf starten Java Basics - Anfänger-Themen 4
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
V Frage zu JUnit Tests Java Basics - Anfänger-Themen 3
A String in Double umwandeln mit Tests Java Basics - Anfänger-Themen 3
A JUnit Tests in Jar-Archiv packen Java Basics - Anfänger-Themen 2
M JUNIT tests mit ant script ausführen Java Basics - Anfänger-Themen 4
T Junit Tests Java Basics - Anfänger-Themen 7
W Problem beim erstellen eines Tests Java Basics - Anfänger-Themen 16
M Junit tests gehen nicht Java Basics - Anfänger-Themen 2
F Gleiche JUnit-Tests automatisert mit verschiedenen Methoden ausführen Java Basics - Anfänger-Themen 6
J Einführung in JUnit-Tests Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben