[Java] Methode mit JUnit testen

Status
Es sind keine weiteren Antworten möglich.

Benjamin52

Cadet 2nd Year
Dabei seit
Apr. 2011
Beiträge
29
Hallo,

ich bin Anfänger und brauch Hilfe.
Ich hab eine Methode die mri sagt ob eine Zahl eine Primzahl ist.

Ich soll jetzt mit JUnit diese Methode testen.
Ich weiss nur das ich dem eine Zahl geben muss und ihn sagen muss das wenn z.b 3 eine Primzahl ist das es true ist und dass die Methode funktioniert.

Also eigentlich brauche ich eine einfache erklärung wie man das mit dem Test macht.

Das ist meine Methode und es sieht halt so mit JUnit aus:

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

import org.junit.Test;

public class PrimzahlMitBereichTest {

	@Test
	public final void testIstPrimzahl() {
		

	boolean istPrim=istPrimzahl(testZahl);
	
	}
}

Die Methode funktioniert auch, ich weiss nur nicht wie man da ran geht bei dem Test.
Hilfe wäre toll :)
 

thepro1

Lt. Junior Grade
Dabei seit
Apr. 2008
Beiträge
411
Bei JUnit ist es prinzipiell am Besten wenn du deine Methode mit statischen Werten vergleichst.
In deinem konkreten Fall wäre es denkbar einen Vector mit allen Primzahlen zwischen 0 und 100 aufzustellen und einem mit dem Rest. Nimm 2 ForEach-Schleifen und lass mal schön mit assertEquals... durchlaufen.
 

Benjamin52

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2011
Beiträge
29
Ich hab grad Bahnhof verstanden.
Ich soll das mit nur einer Zahl machen.
Das macht mich verrückt, es scheint leicht zu sein aber ich weiss nicht wie es geht.
 

Benjamin52

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2011
Beiträge
29
Und wie setze ich das ein?

Der schlägt mir vor das ich aus istPrimzahl eine Methode mache häää
Das ist doch schon eine Methode -.-
 

DonnyDepp

Lt. Commander
Dabei seit
März 2008
Beiträge
1.908
Code:
import static org.junit.Assert.*;

import org.junit.Test;

public class PrimzahlMitBereichTest {

	@Test
	public final void testIstPrimzahl() {
		

	boolean istPrim2=istPrimzahl(2);
	boolean istPrim3=istPrimzahl(3);
	boolean istPrim4=istPrimzahl(4);
	boolean istPrim5=istPrimzahl(5);

        assertTrue(istPrim2);
        assertTrue(istPrim3);
        assertFalse(istPrim4);
        assertTrue(istPrim5);

	
	}
}

usw.
 

hasugoon

Commander
Dabei seit
Juni 2004
Beiträge
2.797
Du benötigst natürlich zuerst die Methode istPrimzahl(), die ja die ganzen Berechnungen durchführt. Wenn du die Methode schon in einer anderen Klasse hast und sie statisch ist, kannst du sie hier auch aufrufen mit Klassenname.istPrimzahl()
 

Benjamin52

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2011
Beiträge
29
Ich verstehe es einfach nicht.

Ja die Methode kommt aus einer anderen Klasse wo sie funktioniert.

Aber WO soll WAS hin? Und wie gebe ich ihm eine Zahl zum Testen oder so.

Ich bin dumm, ja ich gebs zu, bitte erklärt e smir Idiotensicher :(
 

hasugoon

Commander
Dabei seit
Juni 2004
Beiträge
2.797
Im Grunde kannst du es so machen, wie DonnyDepp es geschrieben hat, mit dem kleinen Unterschied, dass du istPrimzahl() eben aus der anderen Klasse aufrufst. Steht im Grunde schon alles hier, das kriegst du auch noch hin.
 

Benjamin52

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2011
Beiträge
29
Ok dann nochmal. Ich verstehe es nicht und ihr redet mit mir so als ob ich wüsste wie das alles funktioniert. Ich bin blutiger Anfänger:

Hier ist der Code der Klasse:

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PrimzahlMitBereich {

	public static void main(String[] args) {

		int untereGrenze = PrüfZahl1();
		int obereGrenze = PrüfZahl2(untereGrenze);
		System.out.print("Die Primzahlen im eingegeben Bereich lauten: ");

		if (untereGrenze <= 1) {
			untereGrenze = 2;
		}
		if (untereGrenze == 2) {
			untereGrenze++;
		}
		int testZahl = untereGrenze;
		if ((testZahl % 2) == 0) {
			testZahl++;
		}
		
		
		
		for (; testZahl <= obereGrenze; testZahl = testZahl + 2) {
			
			boolean istPrim=istPrimzahl(testZahl);
			
			if(istPrim) {
				System.out.print(testZahl + " ");
			}			
		}
	}

	public static boolean istPrimzahl(int testZahl) {
		int divisor = 3;
		int rest = 1;
										
		
		while ((rest != 0) && (divisor < testZahl / 2)) {

			rest = testZahl % divisor;
			divisor = divisor + 2;
		}
		if (rest != 0) {
			return true;
		}
		
		return false;
	}

	static int PrüfZahl1() {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		boolean zahlgueltig = false;
		int zahl = 0;
		do {
			System.out.print("Bitte geben Sie die erste Zahl ein:");
			try {
				zahl = Integer.parseInt(in.readLine());
				if (zahl > 0) {
					zahlgueltig = true;
				} else {
					System.out.println("Fehler: Sie müssen eine positive Zahl eingeben.");
				}
			} catch (NumberFormatException e) {
				System.out.println("Fehler: Sie haben keine Zahl eingegeben.");
			} catch (IOException e) {
				System.out.println("Ein IO Fehler ist aufgetreten");
			}
		} while (!zahlgueltig);

		return zahl;
	}

	static int PrüfZahl2(int untereGrenze) {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		boolean zahlgueltig = false;
		int zahl = 0;
		do {
			System.out.print("Bitte geben Sie die zweite Zahl ein:");
			try {
				zahl = Integer.parseInt(in.readLine());
				if (zahl > 0 && zahl > untereGrenze) {
					zahlgueltig = true;
				} else {
					System.out.println("Fehler: Sie müssen eine positive Zahl eingeben, die größer ist als die erste.");
				}
			} catch (NumberFormatException e) {
				System.out.println("Fehler: Sie haben keine Zahl eingegeben.");
			} catch (IOException e) {
				System.out.println("Ein IO Fehler ist aufgetreten");
			}
		} while (!zahlgueltig);

		return zahl;
	}
}


Und jetzt soll ich mit JUnit die Methode "istPrimzahl" aus dieser Klasse testen indem ich einen Wert festlege.

Es wäre nett wenn ihr mir die Lösung (die gesamte und keine einzelnen Zeilen) eines solchen Tests schreiben würdet und eine Erklärung wie man da vor geht.
 

derlolomat

Lieutenant
Dabei seit
Feb. 2011
Beiträge
796
Vor allem ist das Forum nicht dazu da Hausaufgaben für andere zu machen.
 
C

carom

Gast
In einem Komponententest hat man für gewöhnlich vier Phasen, namentlich setup, exercise, verify und teardown. Was JUnit betrifft gibt es dafür fast 1:1 die Methoden dafür, setup() für setup, Testmethoden für exercise und verify sowie tearDown() für teardown. Wenn dir also wirklich was daran liegt, dann solltest du erst mal verstehen, für was diese Schritte überhaupt gut sind.

Und dass du nicht verstehst wie man andere Klassen instanziiert ist kein JUnit-spezifisches Problem sondern absolute Grundlagenlücken.
 

Fonce

Captain
Dabei seit
Feb. 2006
Beiträge
3.307
Zitat von Benjamin52:
Ok dann nochmal. Ich verstehe es nicht und ihr redet mit mir so als ob ich wüsste wie das alles funktioniert. Ich bin blutiger Anfänger:

Bevor du dir über das Testen Gedanken machst, solltest du erstmal die Grundlagn der Sprache beherrschen!
Dein Code ist gelinde gesagt, mehr als Grenzwertig :rolleyes:
Du mischt Eingaben, Ausgaben mit operativen Code und hast Prüfungen zum teil doppelt.
Ehrlich, das ist einfach nur schrecklich...
 

Benjamin52

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2011
Beiträge
29
Warum seid ihr alle eigentlich so?
Immer das gleiche. "Es ist nicht dazu da um Hausaufgaben zu machen"
"Dein Code ist doof" "Du hast Fehler drin"

Hab ich euch gezwungen mir die Lösung zu geben? Ich hab nur gefragt ob jemand helfen kann und ja ich kann die Sprache noch nicht und versuche sie zu verstehen aber ihr macht gleich alle nieder die hilfe brauchen. Was seid ihr für komische Typen?

Das Forum ist doch nicht dafür da um anderen zu sagen das sie scheisse machen sondern um zu diskutieren. Es gibt echt wenige von euch die helfen. Der rest hällt sich für was besseres und lässt einfach nur blöde Kommentare ab. Die könnt ihr euch sparen, echt.

Zum Thema:
So ich hab gestern selbst gemerkt das Sachen doppelt geprüft werden und auch das die Primzahlberechnung falsch war weil der einfach nur jede zweite Zahl ausgab in einem Bereicht. Das ist natürlich nicht richtig. Ich hab jetzt versucht einen vorherigen Code in das ganze hier ienzufügen weil der richtig ist.

Aber ich hab noch irgendwo einen Fehler drin. Ich hab irgendwas übersehen oder falsch eingetragen und deswegen funktinoert das ganze nur halb.

Wenn jemand so freundlich wäre mir zu helfen und mir den Fehler zu erklären wäre ich ihm sehr dankbar. Alle anderen die meinen mir sagen zu müssen dass ich keine Ahnung habe können sich ihre Kommentare sparen.

Hier ist der Code der jetzt verbessert wurde aber wo noch ein Fehler drin steckt:

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PrimzahlMitBereich {

	public static void main(String[] args) {

		int untereGrenze = PrüfZahl1();
		int obereGrenze = PrüfZahl2(untereGrenze);
		System.out.print("Die Primzahlen im eingegeben Bereich lauten: ");

		for (int i = untereGrenze; i <= obereGrenze; i++) {
			
			boolean istPrim = istPrimzahl(i);

			if (istPrim) {
				System.out.print(i + " ");
			}
		}
	}

	public static boolean istPrimzahl(int testZahl) {

		int zahl = 0;
		int div;
		int erg;
		boolean prim;
		prim = true;
		div = 2;
		zahl = PrüfZahl1();

		while ((zahl - 1) >= div) {
			erg = zahl % div;
			if (erg == 0) {
				System.out.println(zahl + " ist keine Primzahl.");
				prim = false;
				break;
			}
			div++;
		}
		if (prim == true)
			System.out.println(zahl + " ist eine Primzahl.");

		{
			return true;
		}
	}

	static int PrüfZahl1() {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		boolean zahlgueltig = false;
		int zahl = 0;
		do {
			System.out.print("Bitte geben Sie die erste Zahl ein:");
			try {
				zahl = Integer.parseInt(in.readLine());
				if (zahl > 0) {
					zahlgueltig = true;
				} else {
					System.out.println("Fehler: Sie müssen eine positive Zahl eingeben.");
				}
			} catch (NumberFormatException e) {
				System.out.println("Fehler: Sie haben keine Zahl eingegeben.");
			} catch (IOException e) {
				System.out.println("Ein IO Fehler ist aufgetreten");
			}
		} while (!zahlgueltig);

		return zahl;
	}

	static int PrüfZahl2(int untereGrenze) {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		boolean zahlgueltig = false;
		int zahl = 0;
		do {
			System.out.print("Bitte geben Sie die zweite Zahl ein:");
			try {
				zahl = Integer.parseInt(in.readLine());
				if (zahl > 0 && zahl > untereGrenze) {
					zahlgueltig = true;
				} else {
					System.out.println("Fehler: Sie müssen eine positive Zahl eingeben, die größer ist als die erste.");
				}
			} catch (NumberFormatException e) {
				System.out.println("Fehler: Sie haben keine Zahl eingegeben.");
			} catch (IOException e) {
				System.out.println("Ein IO Fehler ist aufgetreten");
			}
		} while (!zahlgueltig);

		return zahl;
	}
}
 

derlolomat

Lieutenant
Dabei seit
Feb. 2011
Beiträge
796

Benjamin52

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2011
Beiträge
29
Lol ich bitte um hilfe und du gibst mit den Link zu den "Regeln" die wir alle befolgen "müssen".
Danke für diese Information.
Ich kann darüber echt nur lachen (falls das laut Regeln auch nicht verboten ist) :D
 

FunnyName

Lt. Commander
Dabei seit
Feb. 2011
Beiträge
1.036
Das Problem ist einfach dass du sehr wenig Input gibst was du in Eigenleistung erbracht hast und vor allem was deine Probleme sind. Was funktioniert an deinem! Code nicht und warum verstehst du's nicht, wäre mal ein Anfang. Bei dir heißts immer "es funktioniert nicht, bitte macht das es funktioniert und erklärts mir dann auch noch!" Da steckt 0 Eigenleistung dahinter und du lernst nix dabei.
Außerdem finde ich das Thema JUnit dann wirklich ein bissl zuviel für einen "blutigen" Anfännger. Andererseits sagst du dass du 'nen Crashkurs gehabt hast, also ist auch die Frage was du in Eigenleistung erbringen hättest können und was nicht (das kann ich nicht einschätzen).
Also wenn du 'ne Frage hast, dann konkretisier sie: Was funktioniert wo, wann nicht und was verstehst du daran nicht.
 

Benjamin52

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2011
Beiträge
29
Ok also. Nur mal so vorher. Ihr seid nicht meine Lehrer denen ich erstmal zeigen muss was ich in Eigenleistung erbracht habe. Ich muss mir eure hilfe nicht verdienen. Entweder ihr helft oder halt nicht. Was solls.

Und das viel wichtigere ist das niemand anscheinend versteht das ich jetzt in dieser situation nicht alles lernen muss oder verstehen muss. Ich schaue es mir nur an und schnappe ein paar Sachen auf. Das wars. Um auf deine Frage zurück zu kommen. Von ganz alleine schaffe ich es gerade mal ein "if-else" in einem code einzubauen.

Zum Thema:

Ich habe einen Primzahlberechnungscode und da drunter zwei Methoden wo PrüfZahl1 und PrüfZahl2 abgefragt werden.

Vorher war da ein anderer Primzahlrechnercode drin der anscheinend falsch war. Jetzt versuche ich meine zwei PrüfZahl Methoden so in die Primzahlberechnung einzubringen dass alles klappt.

Im Moment liesst er Prüfzahl1 und Prüfzahl2 ja richtig aus aber wenn dann kommt "Ihre Zahlen im Bereicht heissen: Bitte geben sie die erste Zahl ein"
Also ist da wohl ein Fehler in einer schleife oder sowas. Und im Primzahlrechner stehen ja immer noch die Sätze "Ist primzahl oder halt keine" die ich ja nicht brauche.

Am ende soll nur da stehen "Die Primzahlen im eingegeben Bereich lauten: xxx"

So ist mein Wissensstand und soviel habe ich bisher. Ich gebe zu das ich nichts selber geschrieben habe weil, wie du es schon gemerkt hast, es zu schwer für einen Anfänger wie mir ist. Es geht einfach nur darum mir das mal anzuschauen. Bitte hört auf mir Moralpredichten zu halten. Und wenn ihr das doof finden dass ich nichts lerne und ich eurer Meinung eure Hilfe nicht verdient habe dann helft einfach nicht.
 

hasugoon

Commander
Dabei seit
Juni 2004
Beiträge
2.797
Wieso fragst du nicht einfach deinen Betreuer? Es wird definitiv besser ankommen, wenn du Fragen stellst als wenn naher ein funktionierendes Programm dasteht, wo doch jeder weiß (auch dein Betreuer), dass es nur zusammenkopiert ist. Wir wollen dich doch nicht "ärgern" mit unseren Ratschlägen, sondern was mit auf den Weg geben. Ich darf doch annehmen, dass du noch recht jung bist. Ich hab dir beispielsweise auch einige Hinweise und Codeschnipsel (die mit Absicht nicht 100% korrekt sind) unterbreitet, die man mit noch einem bisschen mehr an Eigeninitiative zum Laufen hätte bringen können.
 
Status
Es sind keine weiteren Antworten möglich.
Top