Void Mehoden Testen

Blueeye123

Mitglied
Hallo zusammen,

ich hatte eben schonmal etwas geschrieben, da ich einen Fehler in einen Programm nicht gefunden hatte, dass hatte sich erledigt, ich habs geschafft😀
Doch jetzt habe ich Leider ein anderes Problem
ich soll einen Methode testen, die ein Array sortiert. public static void sort(int[] a)
Ich versuche es schon die ganze Zeit, aber bei der Fehlermeldung steht

The method assertEquals(Object, Object) in the type Assert is not applicable for the arguments (int[], void)
Das Problem ist wohl, dass void, aber die Methode muss void sein

Java:
public class SorterTest {

	@Test
	public void ArraySorterTest1() {
		

		int a[] = { 5, 1, 0 }; // ist
		int[] b = { 0, 1, 5 }; // soll rauskommen

		Assert.assertEquals(b, ArraySorter.sortArrayOfLength3(a));
	}

Ich habe schon mehrer assert versucht, aber es kommt immer diese Fehlermeldung, wie oben geschrieben

Hilfe 🙁
 
Zuletzt bearbeitet:
Hallo,

um nochmal spezifischer auf dein Problem einzugehen:

1. Zu sortierendes Array erzeugen (a)
2. Erwartetes Array erzeugen (b)
3. Array sortieren
4. assertEquals(a,b);

Dir fehlt also nur ein Zwischenschritt 🙂

mfg misterbanana
 
Oh, danke dir kann ich den eine Methode in einer Testclasse von einer anderen Klasse aufufen?

SO

Java:
@Test
	public void ArraySorterTest1() {

		int[] a = { 5, 1, 0 }; // ist
		int[] b = { 0, 1, 5 }; // soll rauskommen
		ArraySorter.sortArrayOfLength3(a);
		assertEquals(b, a);
	}


Nun ist der Testfall, aber rot,also Test fehlgeschlgen meine ich
 
Zuletzt bearbeitet:
Die Methode befindet sich vermutlich in einer Klasse. Trifft dies zu, musst du zuerst mittels:

Klassenname instanzname = new Klassenname();

ein Objekt der Klasse instanziieren.

Daraufhin kannst du mit:

instanzname.sortArrayOfLength3(a);

die Methode aufrufen.

mfg misterbanana
 
Ok, danke dir

aber wenn ich es jetzt si schreibe ist es immer noch ein roter Testlauf. Vermutlich habe ich hier ein Vertändnissproblem oder bin momentan blöd :/

Java:
@Test
	public void ArraySorterTest1() {

		int[] a = { 5, 1, 0 }; // ist
		int[] b = { 0, 1, 5 }; // soll rauskommen
		ArraySorter sortArrayOfLenght3 = new ArraySorter();

		ArraySorter.sortArrayOfLength3(a);
		assertEquals(a, b);
	}
 
Du musst die Methode mithilfe ihrer Instanz aufrufen:

ArraySorter.sortArrayOfLength3(a);

musst du ändern in

sortArrayOfLenght3.sortArrayOfLength3(a);

Poste mal den kompletten Methodenkopf der Methode sortArrayOfLength3()
 
Java:
public static void sortArrayOfLength3(int[] a) {
		
		if (a.length < 3 || a.length > 3 || a == null)
			throw new IllegalArgumentException("Bedingung wurde verletzt!!!!!");
		for (int i = 1; i < a.length; i++) {

			int x = a[i];
			int j = i;
			while (j > 0 && a[j - 1] > x) {
				a[j] = a[j - 1];
				a[j - 1] = x;
				j--;
			}
		}
	}
 
Zuletzt bearbeitet:
Also, da es sich um eine statische Methode handelt müssen wir keine Instanz erzeugen,
sondern können direkt mittels:

ArraySorter.sortArrayOfLength3(a);

auf die Methode zugreifen.

Sende doch mal die Dateien komplett. Es ist relativ ungünstig jede Methode static zu machen.

mfg misterbanana
 
🙂

OK, mal anders. Das kann von mir aus auch static bleiben, kein Problem. Was genau ist denn ein roter Testdurchlauf bei dir?
Ein fehlgeschlagener Test? Falls ja, dann ist dies so richtig, da du eine ArrayIndexOutOfBoundsException erhalten wirst.
Falls nein, dann ist es nötig zu sehen, wie die Struktur des Projekts ist.
 
Ja genau, der Test ist fehlgeschlagen sollte aber grün sein. Aber danke für deine Hilfe 🙂. Ich bin Hundemüde und bin im Bett, dass hat mich den ganzen abend aufgehalten

Danke dir nochmal
 
Kein Ding. Damit wäre das Thema wohl abgeschlossen, wenn du wissen willst was der Fehler ist:

Arrays beginnen bei 0 und nicht (wie in deinem Code) bei 1,

[][][]
und du willst sozusagen mit 3 auf das dritte Element zugreifen, 3 ist aber de facto das 4te Element =>

java.lang.ArrayIndexOutOfBoundsException: 3

Gute Nacht
 

Zurück
Oben