Bruchrechner Test

Vancrawl

Neues Mitglied
Hallo Ihr 🙂

Habe hier eine Aufgabe von JAVA und finde leider keinen Ansatz diese zu lösen. :bahnhof:
Es geht um folgendes:

Schreiben Sie ein Programm, das die Prozeduren Ihres Bruchrechner-Programms testet.
• Erstellen Sie ein Programm BruchrechnerTest, das ein Objekt der Klasse Bruchrechner erzeugt.
• Erstellen Sie in diesem Programm zu jeder Ihrer Prozeduren aus „Bruchrechner“ eine Test-Methode, die die Prozedur mit unterschiedlichen Parametern aufruft und das Ergebnis überprüft. Verwenden Sie dazu eine Methode void erwarteGleichheit(…), die zwei (oder vier) Parameter hat und ausgibt, ob die beiden Werte (oder Wertpaare) gleich sind oder nicht.
• Definieren Sie in diesen Methoden jeweils mindestens drei interessante Testfälle, wie negative Werte, sehr große oder sehr kleine Werte und die Null. Probieren Sie, ob Ihr Programm in allen Fällen richtig arbeitet, indem Sie alle Tests automatisch durchführen.

Hier habe ich schon den Bruchrechner:


class Bruchrechner{
static int neuZ;
static int neuN;

public static void main(String[]args){

int z1 = Integer.parseInt(args[1]);
int n1 = Integer.parseInt(args[2]);
int z2 = Integer.parseInt(args[3]);
int n2 = Integer.parseInt(args[4]);

Integer[]zahl = new Integer[4];

zahl[0] = z1;
zahl[1] = n1;
zahl[2] = z2;
zahl[3] = n2;

if(n1 == 0 || n2 == 0 || (args[0].equals("div") && args[3].equals("0"))){
System.out.println("keine division durch null");

}


else{
switch (args[0]){

case "add": Bruchrechner.add(zahl[0],zahl[1],zahl[2],zahl[3]);
break;
case "sub": Bruchrechner.sub(zahl[0],zahl[1],zahl[2],zahl[3]);
break;
case "div": Bruchrechner.div(zahl[0],zahl[1],zahl[2],zahl[3]);
break;
case "mul": Bruchrechner.mul(zahl[0],zahl[1],zahl[2],zahl[3]);
break;
}
}

add(z1, n1, z2, n2);

System.out.println(z1 + "/" + n1 + "/" + " + " + z2 + "/" + n2 + " = " + neuZ + "/" + neuN);
}

static void add(int z1,int n1,int z2,int n2){
neuZ = (z1*n2)+(z2*n1);
neuN = n1*n2;
}
static void sub(int z1,int n1,int z2,int n2){
neuZ = (z1*n2)-(z2*n1);
neuN = n1*n2;
}
static void mul(int z1,int n1,int z2,int n2){
neuZ = z1*z2;
neuN = n1*n2;
}
static void div(int z1,int n1,int z2,int n2){
neuZ = z1*n2;
neuN = n1*z2;
}


}


Kann mir hierzu jemand Tipps geben diese Aufgabe zu meistern?
Danke schonmal 😉

Lg Vancrawl
 
Schreiben Sie ein Programm, das die Prozeduren Ihres Bruchrechner-Programms testet.

Das finde ich interessant, weil ICH IMMER beginne erst einen Test zu schreiben und DANACH den Test zum Laufen bringe.

Ich habe auch mal dazu einen kleinen Blog-Eintrag geschrieben. Darin siehst du auch, dass Tests häufig mit jUnit durchgeführt werden. Dort heissen die Funktionen in etwa so assertXXX.
 
Normalerweise würde man dafür wie schon gesagt JUnit test schreiben, da aber die Vorgabe ist das erwarteteGleichheit() keine Rückgabewert hat, fällt mir gerade nicht ein wie das mit asserts bewerkstelligt werden soll.
Also zunächst wurde ich Bruchrechnen in eine eigene Klasse schreiben, wie auch gefordert. Dann erstellst du dir in der main ein Objekt der Klasse. Die Methode erwarteteGleichheit() bekommt eben zwei Werte und macht eine Ausgabe ob diese gleich sind. Dann hast du eben sowas wie:

Java:
public static void erwarteteGleichheit(Bruchrechnen zahl1, Bruchrechenen zahl2){
 if(zahl1 == zahl2) sysout("Die Zahlen sind gleich ");
 else sysout("Die Zahlen sind es nicht");

}

Bruchrechnen einhalb = new Bruchrechnen(1, 2);
Bruchrechnen eins = new Bruchrechnen(1, 1);
erwarteteGleichheit(eins, einhalb.add(einhalb));

In Bruchrechnen erstellst du eben deine "Bruchzahlen" mit Variablen für Nenner und Zähler, Konstruktor und deinen Methoden. ACHTUNG! Du brauchst auch eine Methode die deine Zahlen vollständig kürzen, da 1/2 ungleich 2/4 ist.
Hoffe das hilft dir etwas weiter.
 
Java:
assertTrue("erwartete Gleichheit", zahl1.isGleich(zahl2))

Also zunächst muss ich sagen das ich kein erfahrener Programmierer bin und stehe gerade ein bisschen auf dem Schlauch, aber aus Interesse möchte ich doch wissen wie es funktioniert.
Mir ist natürlich bewusst das es wie oben von dir Beschrieben gemacht werden kann, aber nur solange die Methode isGleich auch einen Rückgabewert hat. Die Vorgabe lautetet ja eine Methode zu verwenden void erwarteGleichheit(…) und mir fällt dazu kein Weg ein dieses zu lösen. ( Außer vielleicht kompliziert, erst in eine Datei schreiben, danach mit assert zwei strings vergleichen?!)
 
Java:
public static void erwarteteGleichheit(Bruchrechnen zahl1, Bruchrechenen zahl2){
 if(zahl1 == zahl2) sysout("Die Zahlen sind gleich ");
 else sysout("Die Zahlen sind es nicht");

}
Mit == prüfst du Objekte auf Identität, nicht auf Gleichheit.

In Bruchrechnen erstellst du eben deine "Bruchzahlen" mit Variablen für Nenner und Zähler, Konstruktor und deinen Methoden. ACHTUNG! Du brauchst auch eine Methode die deine Zahlen vollständig kürzen, da 1/2 ungleich 2/4 ist.
Hoffe das hilft dir etwas weiter.


Nö, man muss nur eine gescheite (sprich sinnvolle) equals()-Implementierung liefern. Als Vorschlag: 2*2 ist gleich 1*4. Funktioniert natürlich in dieser Form nur bei hinreichend kleinen Zahlen. Für den Test als solchen sollte man aber niemals den Zustand der zu testenden Objekte verändern (es sei denn man erzeugt lokal einen Klon oder sonstige Spaß...)
 
Zuletzt bearbeitet:
Mein kleines Demo-Beispiel für Test einer Addition:

Java:
	@Test
	public void test() {
		Bruchrechner bruchrechner = new Bruchrechner();
		Bruch resultat = bruchrechner.add(new Bruch(1, 2), new Bruch(3, 4));
		erwarteGleichheit(new Bruch(5, 4), resultat);
	}

	private void erwarteGleichheit(Bruch bruch1, Bruch bruch2) {
		assertTrue("erwartetete Gleichheit", bruch1.equals(bruch2));
	}
 

Zurück
Oben