0 votes

Leider kann ich meinen Lösungvorschlag nicht ausführen.

1) Ist die Idee an sich, das worauf die Aufgabenstelung abzielt

2) Kompilieren geht. Aber das Ausführen lässt die Test fehl schlagen. Ich möchte doch nur Testen ob die Implementierung stimmt. Was mache ich falsch?

Aufgabenstellung:

class Spez {

public static int[] f(int[] ar) {
for (int i=0; i<ar.length/2; i++) {

int tmp = ar[i];
ar[i] = ar[ar.length-1-i]; ar[ar.length-1-i] = tmp;

}

return ar; }

public static int[] g(int[] ar) { int[] res = new int[ar.length]; for (int i=0; i<ar.length; i++) {

res[i] = ar[ar.length-1-i]; }

return res; }

}

Schreiben Sie je einen Testfall für Prozedur f und Prozedur g. Die Testfälle sollen so gewählt sein, dass sie für die jeweils andere Prozedur fehlschlagen würden.

import org.junit.Test;
import static org.junit.Assert.*; public class SpezTest {

Lösungsvorschlag:

import static org.junit.Assert.*;
import        org.junit.Test;
import java.util.Arrays;

public class SpezTest{
   
    @Test
        public void fTest(){
            int[] eingabe = {1,2,3,4};
            Spez.f(eingabe);             //Modifikation von eingabe, würde g verwendet, schlägt der Test unten fehl
            int[] erwartet = {4,3,2,1};
            assertEquals(eingabe,erwartet);
        }
       
    @Test
        public void gTest(){
            int[] eingabe = {5,6,7,8};
            int[] kopie = {5,6,7,8};
            int[] erwartet = {8,7,6,5};
            assertEquals(erwartet, Spez.g(eingabe));    /* eingabe wird hier nicht verändert.
             Würde hier f aufgerufen, so würde eingabe verändert und der nachfolgende
             * Test schlägt fehl.
             */
            assertEquals(true, Arrays.equals(eingabe, kopie));
       
        }
}

Ausführen der Tests java -jar junitrunner.jar SpezTest.java liefert -> SHELL:

Failed: fTest(SpezTest): expected:<[I@1963006a> but was:<[I@7fbe847c>
 ... in SpezTest.fTest line 12


Failed: gTest(SpezTest): expected:<[I@6504e3b2> but was:<[I@515f550a>
 ... in SpezTest.gTest line 20


2 von 2 Tests fehlgeschlagen.

in # Mandatory Modules Bachelor by (200 points)

1 Answer

0 votes
Die erste Fehlermeldung sagt, dass in Zeile 12 das Array "eingabe" und "erwartet" unterschiedliche Arrays sind. Die Methode assertEquals prüft nicht den Inhalt der Arrays. Dafür gibt es die Methode "assertArrayEquals". Alternativ kann man auch mit einer Schleife alle Einträge einzeln mit assertEquals vergleichen.

Ein entsprechender Hinweis war auch auf Übungsblatt 5, Aufgabe 3, wo das Problem das erste mal auftrat.
by (930 points)

Related questions

+2 votes
1 answer
0 votes
1 answer
asked Sep 16, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
+1 vote
1 answer
asked Sep 12, 2018 in * TF "Softw.-Eng." by davidschulz (410 points)
0 votes
1 answer
asked Sep 11, 2018 in # Mandatory Modules Bachelor by LerntNieAus (200 points)
0 votes
1 answer
asked Sep 8, 2018 in # Mandatory Modules Bachelor by LerntNieAus (200 points)
Imprint | Privacy Policy
...