我的 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;
我正在 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;