Problem bei der Nachbarschafttest

Anna65

Mitglied
Im Graph oder wo?

Im RL kannst du das vergessen, D hat ja noch nicht mal ein Impfregister 🤣
in Java das ist mein Code
class Field
{
/
* Die Dateinamen der Bodengitterelemente, die direkt mit einer
* Rotation 0 verwendet werden können. Der Index ergibt sich
* aus der Summe der folgenden Zahlen:
* 1: In Richtung 0 (+1, 0) gibt es eine Verbindung.
* 2: In Richtung 1 (0, +1) gibt es eine Verbindung.
* 4: In Richtung 2 (-1, 0) gibt es eine Verbindung.
* 8: In Richtung 3 (0, -1) gibt es eine Verbindung.
*/
private static final String[] NEIGHBORHOOD_TO_FILENAME = {
"grass",
"path-e-0",
"path-e-1",
"path-l-0",
"path-e-2",
"path-i-0",
"path-l-1",
"path-t-1",
"path-e-3",
"path-l-3",
"path-i-1",
"path-t-0",
"path-l-2",
"path-t-3",
"path-t-2",
"path-x"
};
char dieter[][];

/** Ein Testfall, der alle Nachbarschaften enthÃĪlt. */
static void test()
{
new GameObject.Canvas(5, 5, 96, 96);

// Einkommentieren, sobald Konstruktor vorhanden
new Field(new String[] {
"O-O-O-O ",
"| | ",
"O O-O-O O",
"| | | | |",
"O-O-O-O-O",
"| | | | |",
"O O-O-O O",
" | |",
"O-O-O-O-O"
});
}

public Field(String[]field){
dieter=new char[field.length][];
for(int x=0;x<field.length;x++){
dieter[x]=new char[field[x].length()];
for(int y=0; y<field[x].length();y++){
dieter[x][y]=field[x].charAt(y);
}


}
for(int y=0;y<dieter.length;y+=2){
for(int x=0;x<dieter[y].length;x+=2){

GameObject A = new GameObject(x/2,y/2,0,NEIGHBORHOOD_TO_FILENAME[getNeighborhood(x,y)]);
}

}
}

private char getCell(int x, int y){
try {
return dieter[x][y];
} catch(IndexOutOfBoundsException ex) {
return ' ';
}

}
private int getNeighborhood(int x, int y) {
int counter = 0;

if (getCell(x + 1, y) != ' ') counter += 1;
if (getCell(x, y + 1) != ' ') counter += 2;
if (getCell(x - 1, y) != ' ') counter += 4;
if (getCell(x, y -1) != ' ') counter += 8;

return counter;
}
}
 

mihe7

Top Contributor
Bitte Code-Tags verwenden (im Editor oben links auf </> klicken, dort den Code einfügen). Ggf. kannst Du Deinen Beitrag noch bearbeiten.

Die Frage ist: wie ist die Nachbarschaft definiert und was willst Du testen?
 

Anna65

Mitglied
Bitte Code-Tags verwenden (im Editor oben links auf </> klicken, dort den Code einfügen). Ggf. kannst Du Deinen Beitrag noch bearbeiten.

Die Frage ist: wie ist die Nachbarschaft definiert und was willst Du testen?
Java:
Es wurde noch keine Unit-Tests für die Klasse Field implementiert. Dies soll
nun nachgeholt werden. Da sich hasNeighbor auf die eigentlich privaten Methoden getCell und
getNeighborhood abstützt, kann Field über das Zusammenspiel des Konstruktors mit hasNeighbor
vollständig getestet werden. Es braucht nicht getestet zu werden, ob der Konstruktor tatsächlich
die richtigen Grafiken erzeugt.       
    class Field
{
    /
     * Die Dateinamen der Bodengitterelemente, die direkt mit einer
     * Rotation 0 verwendet werden kÃķnnen. Der Index ergibt sich
     * aus der Summe der folgenden Zahlen:
     * 1: In Richtung 0 (+1, 0) gibt es eine Verbindung.
     * 2: In Richtung 1 (0, +1) gibt es eine Verbindung.
     * 4: In Richtung 2 (-1, 0) gibt es eine Verbindung.
     * 8: In Richtung 3 (0, -1) gibt es eine Verbindung.
     */
    private static final String[] NEIGHBORHOOD_TO_FILENAME = {
        "grass",
        "path-e-0",
        "path-e-1",
        "path-l-0",
        "path-e-2",
        "path-i-0",
        "path-l-1",
        "path-t-1",
        "path-e-3",
        "path-l-3",
        "path-i-1",
        "path-t-0",
        "path-l-2",
        "path-t-3",
        "path-t-2",
        "path-x"
    };
    char dieter[][];
    
    /** Ein Testfall, der alle Nachbarschaften enthÃĪlt. */
    static void test()
    {
        new GameObject.Canvas(5, 5, 96, 96);

        // Einkommentieren, sobald Konstruktor vorhanden
        new Field(new String[] {
            "O-O-O-O  ",
            "|   |    ",
            "O O-O-O O",
            "| | | | |",
            "O-O-O-O-O",
            "| | | | |",
            "O O-O-O O",
            "    |   |",
            "O-O-O-O-O"
        });
    }
    
    public Field(String[]field){
    dieter=new char[field.length][];
    for(int x=0;x<field.length;x++){
        dieter[x]=new char[field[x].length()];
        for(int y=0; y<field[x].length();y++){
            dieter[x][y]=field[x].charAt(y);
        }
    
    
    }
    for(int y=0;y<dieter.length;y+=2){
        for(int x=0;x<dieter[y].length;x+=2){
            
            GameObject A = new GameObject(x/2,y/2,0,NEIGHBORHOOD_TO_FILENAME[getNeighborhood(x,y)]);
        }
    
    }
    }
    
    private char getCell(int x, int y){
    try {
            return dieter[x][y];
        } catch(IndexOutOfBoundsException ex) {
            return ' ';
        }
 
}
    private int getNeighborhood(int x, int y) {
        int counter = 0;

        if (getCell(x + 1, y) != ' ') counter += 1;
        if (getCell(x, y + 1) != ' ') counter += 2;
        if (getCell(x - 1, y) != ' ') counter += 4;
        if (getCell(x, y -1) != ' ') counter += 8;
      
        return counter;
}
}
 

mihe7

Top Contributor
OK, es geht also um Unit-Tests und die Frage ist, wie Du getNeighborhood testen kannst. Dazu bräuchtest Du noch nicht mal den Code, sondern die Spezifikation der Methode.

Im Endeffekt erzeugst Du ein neues Field-Objekt, gibst dabei ein Dir bekanntes Feld in Form eines Arrays mit. Da Du das Feld kennst, weißt Du natürlich auch, was getNeighborhood() für einen bestimmten Punkt im Feld liefern muss und nichts anderes testest Du eben ab.
 

Neumi5694

Top Contributor
Also wenn ich das richtig verstehe, dann soll die Methode hasNeighbor als Ergebnis haben, ob getNeighborhood > 0 liefert.

Der Unit-Test muss auf jeden Fall prüfen, ob das Ergebnis stimmt. Dazu musst du Fälle erstellen, in denen ein Nachbar vorhanden ist (am Besten in allen möglichen Variationen) und auch solche, wo es keine Nachbarn gibt.
 

mihe7

Top Contributor
Ich habe nicht ganz verstanden. Kann jemand mir genau sagen, was ich schreiben soll und wo ?
Nehmen wir mal an, Du hast eine Methode mit der Signatur int plus(int a, int b) und diese Methode soll die Summe von a und b liefern, sofern das Ergebnis in ein int passt, ansonsten eine ArithmeticException auslösen.

Jetzt kannst Du Dir Testfälle überlegen, hier also Belegungen von Parametern. Für jeden Testfall weißt Du ja, was als Ergebnis erwartet wird. Du könntest Dir also überlegen: plus(0,0) muss 0 liefern, plus(x, 0) natürlich x, genauso wie plus(0,x) für nicht-negative x und negative x. Du könntest positive Werte x,y addieren oder einen negativen Wert mit einem positiven und umgekehrt. Du könntest Integer.MAX_VALUE für den Parameter a und 1 für den Parameter b verwenden, um zu testen, ob die Exception ausgelöst wird. Du könntest Integer.MAX_VALUE für den Parameter a und 0 für den Parameter b verwenden, um zu testen, ob die Exception an dieser Grenze nicht ausgelöst wird usw.

Den Testfall "plus(0,0) muss 0 liefern" könnte man (sehr ausführlich) wie folgt implementieren:
Java:
int erwartetesErgebnis = 0;
int paramA =0;
int paramB = 0;
int tatsaechlichesErgebnis = plus(paramA, paramB);
if (tatsaechlichesErgebnis != erwartetesErgebnis) {
    System.err.printf("Test schlug fehl. plus(%d, %d); erwartetes Ergebnis %d, war jedoch %d%n", 
            paramA, paramB, erwartetesErgebnis, tatsaechlichesErgebnis);    
    System.exit(1);
}

Wenn Ihr JUnit verwendet (hier sehr kurz):
Java:
@Test
public void plusSoll0Liefern() {
    assertEquals(0, plus(0,0));
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben