Mit JUnit zufällige Zahlen testen

DrIkarus

Mitglied
Hallo,

ich hab eine Klasse geschrieben, die ein magisches Quadrat erstellt.

Bsp.: n ist eine ungerade Zahl, z.B.: 3.
Dann wird ein magisches Quadrat erstellt, mit Spalten und Zeilenlänge 3.
Funktioniert alles bestens.

Dazu will ich jetzt ein jUnit Test schreiben, bei der das n mit Zahlen getestet wird.
Diese Zahlen müssen eine bestimmte Bedingungen erfüllen: n= (n^3*n)+2;

Ich muss AssertEqual benutzen, um zu den aktuellen Wert und den expected Wert abzugleichen.

Aber ich bin verwirrt, ich bekomm das einfach nicht hin. Eigentlich wollte ich für den Excpected Wert die Formel benutzen und für die aktuelle Zahl irgendeine ungerade Zahl.

Ich hoffe ihr versteht was ich machen möchte. Über Tipps oder hilfreiche Links würde ich mich freuen.

Danke
 
Ich habe nicht so ganz verstanden was du machen möchtest?

Die Formel scheint mir auch nicht richtig zu sein, weil wie kann n wieder auf sich selbst verweisen?

Mit einer Zufallszahl kannst du auf jeden Fall nur testen, wenn du das Ergebnis auf einfache Weise vorberechnen kannst. Ansonsten würdest du deine Berechnung ja im Testfall und im eigentlichen Programm doppeln.

Normalerweise testet man immer die Extrema (kleinster + größter Wert), einen mittleren Wert und einen zusätzlichen anderen Wert. Aber die weiß man vorher und kennt auch das Ergebnis vorher.
 
Also das hier ist der Code:

Code:
public class MagicSquare 
	{
	    public static void main(String args[])
	    {
	       int n = 5; 					//Dieser Wert muss ungerade sein!
	        int a[][] = new int[n][n]; 	//Neues mehrdimensionales Array a mit Spalten & Zeilen gleich n  
	        f(n,1,n/2,n-1,a);			
	        print(a);
	    }
	  //Funktion für die Darstellung der Matrix; Typ vor dem Fragezeichen ist boolean,
		//Wenn der Typ = true, dann wird zwischen dem Fragezeichen und dem Doppelpunkt
		//ausgewertet. Falls der Wert vor dem Fragezeichen=false, wird nur der Ausdruck nach dem 
		//Doppelpunkt ausgewertet.
	    
	    static int f(int j,int i,int k,int l,int b[][])
	    {			 
	    	if (i > j*j) {
	    		return i-1;
	    	}   else {
	    		b[k][l]=f(j,i+1,
	    		(k+(i%j==0 ? 0 :1))%j,
	    		(l+(i%j==0 ? -1: 1))%j,
	    		b);
	    	}
	    	return b[k][l]-1;
	    }
	    
	  //Ausdruck der Matrix
	    public static void print(int a[][])
	    {
	        for (int i=0; i<a.length; i++)
	        {
	            for (int j=0; j<a[i].length; j++)
	            {
	                System.out.print((a[j][i]<10?" ":"")+a[j][i]+" ");
	            }
	            System.out.println();
	        }
	    }
	}


Dafür möchte ich jetzt einen JUnit Test schreiben.
Wenn ich das richtig verstanden habe, dann muss ich die Testklasse auf dem n anwenden, also das n mit 100 Zahlen durchlaufen und dann überprüfen, ob bei jeder ungeraden Zahl auch wirklich ein magisches Quadrat entsteht.

Jetzt besser erklärt? :D
 
Hi.
Wenn ich das richtig verstanden habe, dann muss ich die Testklasse auf dem n anwenden, also das n mit 100 Zahlen durchlaufen und dann überprüfen, ob bei jeder ungeraden Zahl auch wirklich ein magisches Quadrat entsteht.
Dann mußt du lediglich eine Funktion schreiben, die überprüft ob ein gegebenes Array deiner Definition von "magisches Quadrat" genügt.

Dann erzeugst du in einer Schleife (i = 1 bis 99 Schrittweite 2) die Arrays und rufst die Testmethode damit auf.

Gruß
 
Zurück