我的 JUnit 测试结果得到最后的值,所以每次我的测试失败

My JUnit test results get the last values so every time my test fails

我正在 Java 中创建一个非默认构造函数,每当我用我的老师给我的 JUnit 测试来测试我的代码时,我都知道它们失败了。 当我调试时,我没有发现问题,因为我的值在字面上是正确的,直到它以某种方式获得构造函数的最后值。

我真的不知道我做错了什么,但这是我的非默认构造函数的代码。

package logica;

public class KaartBoek {
    final int AANTAL;
    static char[][] stapel;

    public KaartBoek(){
        AANTAL = 52;
        stapel = new char[52][2];

        //Loop voor harten
        for(int i = 1; i <= 13; i++){
            stapel[i - 1][0] = 'H';
            if (i == 1){
                stapel[i - 1][1] = 'A';
            }
            else if (i < 10 && i > 1){
                String getalString = Integer.toString(i);
                char karakter = getalString.charAt(0);
                stapel[i-1][1] = karakter;
            }
            else if(i == 10){
                stapel[i - 1][1] = 'T';
            }
            else if(i == 11){
                stapel[i - 1][1] = 'B';
            }
            else if(i == 12){
                stapel[i - 1][1] = 'D';
            }
            else if(i == 13){
                stapel[i - 1][1] = 'H';
            }
        }
        //Loop voor klaveren
        for(int i = 14; i <= 26; i++){
            stapel[i - 1][0] = 'K';
            if (i == 14){
                stapel[i - 1][1] = 'A';
            }
            else if (i < 23 && i > 14){
                String getalString = Integer.toString(i - 13);
                char karakter = getalString.charAt(0);
                stapel[i - 1][1] = karakter;
            }
            else if(i == 23){
                stapel[i - 1][1] = 'T';
            }
            else if(i == 24){
                stapel[i - 1][1] = 'B';
            }
            else if(i == 25){
                stapel[i - 1][1] = 'D';
            }
            else if(i == 26){
                stapel[i - 1][1] = 'H';
            }
        }

        //Loop voor ruiten
        for(int i = 27; i <= 39; i++){
            stapel[i - 1][0] = 'R';
            if (i == 27){
                stapel[i - 1][1] = 'A';
            }
            else if (i < 36 && i > 27){
                String getalString = Integer.toString(i - 26);
                char karakter = getalString.charAt(0);
                stapel[i - 1][1] = karakter;
            }
            else if(i == 36){
                stapel[i - 1][1] = 'T';
            }
            else if(i == 37){
                stapel[i - 1][1] = 'B';
            }
            else if(i == 38){
                stapel[i - 1][1] = 'D';
            }
            else if(i == 39){
                stapel[i - 1][1] = 'H';
            }
        }

        //Loop voor schoppen
        for(int i = 40; i <= 52; i++){
            stapel[i - 1][0] = 'S';
            if (i == 40){
                stapel[i - 1][1] = 'A';
            }
            else if (i < 49 && i > 40){
                String getalString = Integer.toString(i - 39);
                char karakter = getalString.charAt(0);
                stapel[i - 1][1] = karakter;
            }
            else if(i == 49){
                stapel[i - 1][1] = 'T';
            }
            else if(i == 50){
                stapel[i - 1][1] = 'B';
            }
            else if(i == 51){
                stapel[i - 1][1] = 'D';
            }
            else if(i == 52){
                stapel[i - 1][1] = 'H';
            }
        }
    }

    public KaartBoek(char[] KaartBoekZelf){
        int geldigTeken = 0;
        boolean isR = false;
        boolean isS = false;
        boolean isK = false;
        boolean isH = false;
        char[] geldigeKaartenArray;

        //Beslissen of het een geldige kaart is met het eerste if statement.
        //Beslissen of deze geldige kaart al eens is toegevoegd met het 2de if-statement
        for (char geldigMisschien : KaartBoekZelf) {
            if (geldigMisschien == 'S' || geldigMisschien == 'R' || geldigMisschien == 'K' || geldigMisschien == 'H'){
                if (!isR && geldigMisschien == 'R'){
                    geldigTeken++;
                    isR = true;
                }
                else if(!isS && geldigMisschien == 'S'){
                    geldigTeken++;
                    isS = true;
                }
                else if(!isK && geldigMisschien == 'K'){
                    geldigTeken++;
                    isK = true;
                }
                else if(!isH && geldigMisschien == 'H'){
                    geldigTeken++;
                    isH = true;
                }
                else{
                    continue;
                }
            }
            else{
                continue;
            }
        }
        //De geldige kaarten toevoegen aan een array waar over geloopt kan worden.
        geldigeKaartenArray = new char[geldigTeken];
        //Degene die true zijn toevoegen aan de array.
        for (int i = 0; i < geldigTeken; i++){
            int teller = 0;
            if (isS){
                geldigeKaartenArray[teller] = 'S';
                teller++;
            }
            if (isR){
                geldigeKaartenArray[teller] = 'R';
                teller++;
            }
            if (isK){
                geldigeKaartenArray[teller] = 'K';
                teller++;
            }
            if (isH){
                geldigeKaartenArray[teller] = 'H';
                teller++;
            }
        }

        AANTAL = geldigTeken * 13;
        stapel = new char[AANTAL][2];
        int multiplier = 0;
        for (char character : geldigeKaartenArray){
            for (int i = 0; i < (AANTAL / geldigTeken); i++){
                stapel[i + multiplier * 13][0] = character;
                if (i == 0){
                    stapel[i + multiplier * 13][1] = 'A';
                }
                if (i > 0 && i < 9){
                    int nummer = i + 1;
                    String number = String.valueOf(nummer);
                    stapel[i + multiplier * 13][1] = number.charAt(0);
                }
                if (i == 9){
                    stapel[i + multiplier * 13][1] = 'T';
                }
                if (i == 10){
                    stapel[i + multiplier * 13][1] = 'B';
                }
                if (i == 11){
                    stapel[i + multiplier * 13][1] = 'D';
                }
                if (i == 12){
                    stapel[i + multiplier * 13][1] = 'H';
                }
            }
            multiplier++;
        }
    }


    public static boolean isGeldigeSoort(char soort){
        if (soort == 'H' || soort == 'K' || soort == 'R' || soort == 'S'){
            return true;
        }
        else{
            return false;
        }
    }

    public static boolean isGeldigeWaarde(char waarde){
        if(waarde == '2' || waarde == '3' || waarde == '4' || waarde == '5' ||
                waarde == '6' || waarde == '7' || waarde == '8' || waarde == '9' || waarde == 'T' ||
                waarde == 'B' || waarde == 'D' ||  waarde == 'H' ||  waarde == 'A'){
            return true;
        }
        else{
            return false;
        }
    }

    public static boolean isGeldigeKaart(String kaart){
        if (kaart.length() == 2){
            if(isGeldigeSoort(kaart.charAt(0)) && isGeldigeWaarde(kaart.charAt(1))){
                return true;
            }
            else{
                return false;
            }
        }
        else{
            return false;
        }
    }
    public boolean bevatKaart(String kaart){
        boolean isValid = false;
        for (int i = 0; i < stapel.length; i++){
            String kaartVergelijker = String.valueOf(stapel[i][0]) + String.valueOf(stapel[i][1]);
            if (kaartVergelijker.equals(kaart)){
                isValid = true;
            }
            else{
                continue;
            }
        }
        return isValid;
    }

    public boolean bevatKaartVanSoort(char soort){
        if (soort == 'S' || soort == 'R' || soort == 'K' || soort == 'H'){
            for (int i = 0; i < stapel.length; i++) {
                if (stapel[i][0] == soort){
                    return true;
                }
            }
        }
        return false;
    }

    public String[] geefAlleKaartenVanSoort(char soort){
        String[] gelijkeSoort;
        //Tellen hoeveel keer dezelfde soort in de stapel zit
        int teller = 0;
        for (char[] element : stapel) {
            if (element.equals(soort)){
                teller++;
            }
        }
        //Het aantal keer dezelfde soort de lengte maken.
        gelijkeSoort = new String[teller];

        //Opnieuw loopen om nu de kaarten toe te voegen aan de string die gelijk zijn
        int tellerPositie = 0;
        int gelijkeSoortPositie = 0;
        for (char[] element : stapel) {
            if (element.equals(soort)){
                String gelijkeSoortToevoegen = "";
                gelijkeSoortToevoegen += stapel[tellerPositie][0];
                gelijkeSoortToevoegen += stapel[tellerPositie][1];
                gelijkeSoort[gelijkeSoortPositie] = gelijkeSoortToevoegen;
                gelijkeSoortPositie++;
            }
            tellerPositie++;
        }
        return gelijkeSoort;
    }
}

这是 JUnit 测试:

逻辑包;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

/**
 * javafundrecap : KaartBoekTest
 *
 * @author kristien.vanassche
 * @version 6/02/2021
 */
class KaartBoekTestDeel2 {
    private KaartBoek boek1, boek2, boek3, boek4;

    private KaartBoekTestDeel2() {
        boek1 = new KaartBoek();

        boek2 = new KaartBoek(new char[]{'H', 'R'});
        boek3 = new KaartBoek(new char[]{'H', 'R', 'S'});
        boek4 = new KaartBoek(new char[]{'H', '*'});
    }

    @Test
    void nietDefaultConstructorBoek2() {
        assertNotNull(boek2);
        assertEquals(13 * 2, boek2.AANTAL);
        assertEquals(13 * 2, boek2.stapel.length);
        assertEquals(2, boek2.stapel[0].length);
    }

    @Test
    void nietDefaultConstructorBoek3() {
        assertNotNull(boek3);
        assertEquals(13 * 3, boek3.AANTAL);
        assertEquals(13 * 3, boek3.stapel.length);
    }

    @Test
    void nietDefaultConstructorBoek4() {
        assertNotNull(boek4);
        assertEquals(13, boek4.stapel.length);
    }

    @Test
    void bevatKaartBoek2() {
        String waarden = "23456789TBDHA";
        char soort, waarde;
        for (int j = 0; j < waarden.length(); j++) {
            waarde = waarden.charAt(j);
            assertTrue(boek2.bevatKaart("H" + waarde));
            assertTrue(boek2.bevatKaart("R" + waarde));
            assertFalse(boek2.bevatKaart("S" + waarde));
            assertFalse(boek2.bevatKaart("K" + waarde));
        }
    }

    @Test
    void bevatKaartVanSoortBoek1() {
        assertTrue(boek1.bevatKaartVanSoort('H'));
        assertTrue(boek1.bevatKaartVanSoort('K'));
        assertTrue(boek1.bevatKaartVanSoort('R'));
        assertTrue(boek1.bevatKaartVanSoort('S'));
        assertFalse(boek1.bevatKaartVanSoort('*'));
    }

    @Test
    void bevatKaartVanSoortBoek2() {
        assertTrue(boek2.bevatKaartVanSoort('H'));
        assertFalse(boek2.bevatKaartVanSoort('K'));
        assertTrue(boek2.bevatKaartVanSoort('R'));
        assertFalse(boek2.bevatKaartVanSoort('S'));
        assertFalse(boek2.bevatKaartVanSoort('*'));
    }

    @Test
    void geefAlleKaartenVanSoortBoek1() {
        assertEquals(13, boek1.geefAlleKaartenVanSoort('H').length);
        assertEquals(13, boek1.geefAlleKaartenVanSoort('K').length);
        assertEquals(13, boek1.geefAlleKaartenVanSoort('R').length);
        assertEquals(13, boek1.geefAlleKaartenVanSoort('S').length);
        assertEquals(0, boek1.geefAlleKaartenVanSoort('*').length);

        int sumIdx = 0;
        for (String s : boek1.geefAlleKaartenVanSoort('H')) {
            assertEquals('H', s.charAt(0));
            assertTrue("23456789TBDHA".indexOf(s.charAt(1)) >= 0);
            sumIdx += "23456789TBDHA".indexOf(s.charAt(1));
        }
        assertEquals(78, sumIdx);
    }

    @Test
    void geefAlleKaartenVanSoortBoek2() {
        assertEquals(13, boek2.geefAlleKaartenVanSoort('H').length);
        assertEquals(0, boek2.geefAlleKaartenVanSoort('K').length);
        assertEquals(13, boek2.geefAlleKaartenVanSoort('R').length);
        assertEquals(0, boek2.geefAlleKaartenVanSoort('S').length);
        assertEquals(0, boek2.geefAlleKaartenVanSoort('*').length);
    }
}

我希望你明白我的问题是什么。 在这里你可以看到当我调试时我确实得到了正确的“AANTAL”数量

我不得不把我的数组 non-static.

final int AANTAL;
char[][] stapel;