Minesweeper Test

TPKey

Mitglied
Hi
ich möchte für dieses Minesweeper Programm 2 Testmethoden implementieren um ein Minenfeld und ein Nicht-Minenfeld zu testen.
Nun frage ich mich, wie ich am besten die void Methoden testen kann

Java:
import java.util.InputMismatchException;
import java.lang.Math;
import java.util.Scanner;



public class Main {
  public static void main(String[] args) {
  
   
    Board b = new Board();
    b.display();
    Scanner input = new Scanner(System.in);
    int v;   
    int h;   
   
   
    while (!b.getGameState()) {
        System.out.print("Bitte geben sie zwei Koordinaten an!");
        boolean check = true;   
        do {
            try {
                v = input.nextInt();
                h = input.nextInt();
                b.uncover(v, h);
                b.display();
                check = false;
            }
            catch (Exception e) {
                System.out.println("Bitte geben Sie erneut zwei Koordinaten an!");
                input.next();
            }
        } while (check);
    }
    System.out.println("Game over");
   
  }
}

class Board {
    private int height = 4;       
    private int width = 4;       
    private int mines = 1;       
    private int uncovered = 0;   
    private int[][] values;       
    private boolean[][] board;   
    private boolean endGame;   
   
   
    public Board(){
        this.values = new int[this.height][this.width];
        this.board = new boolean[this.height][this.width];
        placeMines();
        setValues();
    }
   
   
    public Board(int h, int w, int m) {
        this.height = h;
        this.width = w;
        this.mines = m;
        this.values = new int[this.height][this.width];
        this.board = new boolean[this.height][this.width];
        placeMines();
        setValues();
    }
   

    public void placeMines() {
        int placed = 0;   
        int y = 0;       
        int x = 0;
       
       
        while (placed < this.mines) {
            y = (int)(Math.random() * this.height);
            x = (int)(Math.random() * this.width);
            if (values[0][0] != -1) {
                values[0][0] = -1;
                placed++;
            }
        }
    }
   
   
    public void setValues() {
        for (int i = 0; i < this.height; i++) {
            for (int j = 0; j < this.width; j++) {
                if (values[i][j] != -1) {       
                    values[i][j] = checkAdj(i, j);   
                }
            }
        }
    }
   
   
    public int checkAdj(int y, int x) {
        int sum = 0;   
        for (int a = -1; a <= 1; a++) {
            if (y + a >= 0 && y + a <= this.height - 1) {   
                for (int b = -1; b <= 1; b++) {
                   
                    if (x + b >= 0 && x + b <= this.width - 1 && (b != 0 || a != 0)) {
                        if (values[y + a][x + b] == -1) sum++;
                    }
                }
            }
        }
        return sum;
    }
   

    public void uncover(int y, int x) {
        if (values[y][x] == -1)    {
            endGame = true;
            board[y][x] = true;
        }
        else if (values[y][x] == 0) {   
            if (!board[y][x]) {
                board[y][x] = true;       
                uncovered++;   
            }
            for (int a = -1; a <= 1; a++) {
                if (y + a >= 0 && y + a <= this.height - 1) {   
                    for (int b = -1; b <= 1; b++) {
                       
                        if (x + b >= 0 && x + b <= this.width - 1 && (b != 0 || a != 0)) {
                            if (!board[y + a][x + b])
                                uncover(y + a, x + b);
                        }
                    }
                }
            }
        }
        else
            if (!board[y][x]) {
                board[y][x] = true;       
                uncovered++;   
            }
    }
   
   
    public boolean getGameState() {
       
        if (uncovered >= width * height - mines) {
            endGame = true;
            System.out.println("Du hast gewonnen!");
        }
       
        else if (endGame)
            System.out.println("Du hast verloren!");
        return this.endGame;
    }
   
   
    public void display() {
        for (int a = 0; a < this.height; a++) {
            for (int b = 0; b < this.width; b++) {
                if (board[a][b])
                    System.out.printf("%2d ", values[a][b]);
                else
                    System.out.print(" X ");
            }
            System.out.println();
        }
       
       
        System.out.println();
        System.out.println();
       
       
    }
}
 

Tronert

Mitglied
Wieso testest du das Programm nicht einfach dort wo es am Ende angezeigt wird? Was benutzt du für die grafische Darstellung überhaupt?
 

temi

Top Contributor
Interessante Frage. Ich habe leider auch noch nicht so viel Erfahrung mit Unittesting, aber mal aus dem Bauch heraus:
Um z.B. placeMines() zu testen müsstest du Zugriff auf das Minenfeld haben, dann kannst du im Test kontrollieren, ob die korrekte Anzahl an Minen platziert wurden. Dazu könntest du:
1. Einen getter für das Minenfeld einfügen (finde ich aber nicht so schön, die Kapselung nur für Tests zu vermindern)
2. Das Feld protected machen und in einer abgeleiteten Testklasse den getter einfügen.
3. Reflection verwenden.

Meinungen von erfahrenen Unittestern würden mich auch interessieren.
Gruß,
temi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Minesweeper Logik Java Basics - Anfänger-Themen 10
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
E Minesweeper-Problem Java Basics - Anfänger-Themen 13
J Minesweeper Hilfe Java Basics - Anfänger-Themen 26
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
W Problem bei MineSweeper Programmierung Java Basics - Anfänger-Themen 10
C Minesweeper mit Arrays über Konsole Java Basics - Anfänger-Themen 4
0 Minesweeper Java Basics - Anfänger-Themen 16
J minesweeper Java Basics - Anfänger-Themen 2
I Minesweeper Java Basics - Anfänger-Themen 2
I Warum kommt der Fehler? Minesweeper programmieren Java Basics - Anfänger-Themen 7
T Minesweeper in Java Java Basics - Anfänger-Themen 6
G Minesweeper Java Basics - Anfänger-Themen 4
G ZUFALLSFUNKTION in Minesweeper (6x6)? Java Basics - Anfänger-Themen 17
S Fehler nach dynamischer Anpassung - Minesweeper Java Basics - Anfänger-Themen 6
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
W junit.Test not accessible? Java Basics - Anfänger-Themen 4
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
D Hilfe bei Calculator Test Java Basics - Anfänger-Themen 15
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
A Test Junit Java Basics - Anfänger-Themen 1
H Junit test Java Basics - Anfänger-Themen 12
P JUnitTest Best Practise (Ein Assert pro Test?) Java Basics - Anfänger-Themen 10
P Methoden JUnit 4 - Test Java Basics - Anfänger-Themen 6
Mr_Kleeblatt Operatoren if (arri[i] != "test.java"&& arri[i] != "test.class") Java Basics - Anfänger-Themen 3
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
L Test-Methoden schreiben Java Basics - Anfänger-Themen 13
D Test auf Dopplungen Java Basics - Anfänger-Themen 32
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
B zzz.test Java Basics - Anfänger-Themen 13
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
C Erste Schritte Hexidezimal-Test Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
S Junit Test Java Basics - Anfänger-Themen 2
F Test Java Basics - Anfänger-Themen 12
W Ist das ein legitimer Test? Java Basics - Anfänger-Themen 5
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
U Best Practice Datenbereitstellung Unit Test Java Basics - Anfänger-Themen 6
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
Z Vererbung Test auf Normalverteilung, Wilcoxon Java Basics - Anfänger-Themen 3
M Assertion NotNull Test Java Basics - Anfänger-Themen 3
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
W Test, ob Datei existiert, schlägt fehl Java Basics - Anfänger-Themen 4
T JUnit test failed Java Basics - Anfänger-Themen 3
H Array Test Methode schreiben Java Basics - Anfänger-Themen 3
R JUnit Test mit einer Dateistruktur als Testparameter Java Basics - Anfänger-Themen 3
V Bruchrechner Test Java Basics - Anfänger-Themen 7
T Test läuft schief Java Basics - Anfänger-Themen 3
shiroX OOP Array kleinste Zahl mit jUnit test Java Basics - Anfänger-Themen 3
G mache aus Test nach sortieren estt oder java aajv Java Basics - Anfänger-Themen 5
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
x22 Java Multiple Choice Test Java Basics - Anfänger-Themen 8
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
B JUnit - Mini-Test Java Basics - Anfänger-Themen 9
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
N Test mit assert Java Basics - Anfänger-Themen 9
Y Junit Test - Testwert ändert sich Java Basics - Anfänger-Themen 12
K Palindrom Test Java Basics - Anfänger-Themen 9
S Performance-/Stress Test für Webanwendung Java Basics - Anfänger-Themen 2
V Mediaplayer - NullPointerException bei Unit-Test Java Basics - Anfänger-Themen 4
H Ich kann mein Java Programm Test.class nicht ausführen Java Basics - Anfänger-Themen 6
H Javabefehl Test Java Basics - Anfänger-Themen 3
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
H lucas-test Java Basics - Anfänger-Themen 14
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
N Methoden Test ob Server vorhanden ist Java Basics - Anfänger-Themen 4
N Test Datei = Bild Java Basics - Anfänger-Themen 5
S Erste Schritte 1. Test Programm Java Basics - Anfänger-Themen 21
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
T brauche HILFE beim Junit test:eek: Java Basics - Anfänger-Themen 11
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
E Am Mittwoch Test und ich checks überhaupt nich Java Basics - Anfänger-Themen 27
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
J JUnit Test Java Basics - Anfänger-Themen 2
D Test einer Chipkarte Java Basics - Anfänger-Themen 2
J Problem mit Test-Klasse Java Basics - Anfänger-Themen 4
E Test, ob String in Double umwandelbar ist Java Basics - Anfänger-Themen 3
J Test steht vor der Tür !! Java Basics - Anfänger-Themen 2
X Array nur mit Zahlen (test) Java Basics - Anfänger-Themen 11
Houly JUnit Test Suite anlegen Java Basics - Anfänger-Themen 6
F Primitiver Lucas-Lehmer-Test hängt sich auf Java Basics - Anfänger-Themen 7
M Erster HashMap-test Java Basics - Anfänger-Themen 5
O Test auf JComponent Java Basics - Anfänger-Themen 7
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
D C0 und C1 Test nochmal Java Basics - Anfänger-Themen 9
D C0 und C1 Test Java Basics - Anfänger-Themen 3
G BlueJ jUnit Test Java Basics - Anfänger-Themen 6
J Test auf UTF-8 Java Basics - Anfänger-Themen 2
M Wo und wie speich. ich .java und wo den zugehörigen test? Java Basics - Anfänger-Themen 2
Shalimar Test, ob mehr pos. oder neg. Zahlen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben