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.