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:
Außerdem habe ich noch eine Methode, die mir die Arraywerte zurück gibt.
Mit freundlichen Grüßen
javaNoob13
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