Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向字符串数组string[]添加元素并在Junit中测试结果_Java_Unit Testing_Junit4_Arrays - Fatal编程技术网

Java 向字符串数组string[]添加元素并在Junit中测试结果

Java 向字符串数组string[]添加元素并在Junit中测试结果,java,unit-testing,junit4,arrays,Java,Unit Testing,Junit4,Arrays,我正在用Java学习数据结构。我必须创建一个包实现。我使用String[]数组来完成这项工作,并在JUnit中测试结果 我的班级是: public class BagImplementation { private int num = 4; private String[] thisBag = new String[num]; private int count =0; public int getCount(){ return count;

我正在用Java学习数据结构。我必须创建一个包实现。我使用String[]数组来完成这项工作,并在JUnit中测试结果

我的班级是:

public class BagImplementation {

    private int num = 4;
    private String[] thisBag = new String[num];
    private int count =0;

    public int getCount(){
        return count;
    }

    public int getCurrentSize() {
        return num;
    }
        public boolean add(String newEntry) {
        if(getCurrentSize() >= count){
            thisBag[count] = newEntry;
            count++;
            return true;
        }else{
            count++;
            System.out.println("reaching");
            return false;
        }
    }
}
我的JUnit测试类是:

import static org.junit.Assert.*;
import org.junit.Test;

public class BagImplementationTest {

    @Test
    public void test() {
        BagImplementation thisBag = new BagImplementation();
        String input1 = "hi";
        Boolean added1 = thisBag.add(input1);
        assertEquals(true, added1);

        String input2 = "hi";
        Boolean added2 = thisBag.add(input2);
        assertEquals(true, added2);

        String input3 = "hi";
        Boolean added3 = thisBag.add(input3);
        System.out.println(thisBag.getCount());
        assertEquals(true, added3);

        String input4 = "hi";
        Boolean added4 = thisBag.add(input4);
        assertEquals(true, added4);

        String input5 = "hi";
        Boolean added5 = thisBag.add(input5);
        System.out.println(thisBag.getCount());
        System.out.println(added5);
        assertEquals(false, added5);

    }

}
JUnit测试应该通过,因为前四个测试必须为true,第五个测试为false。但是,由于最后一个断言,我的测试失败了。此外,print语句(System.out.println(added5);和assertEquals(false,added5);)不打印任何内容。看起来测试类没有读取added5的值。我多次调试这段小代码,但都没有成功。需要帮忙吗


注意:如果我将参数num设置为5,将最后一个断言设置为“assertEquals(true,added5)”,则测试通过

在您的
add
函数中,您有以下if条件:

if (getCurrentSize() >= count) {
其中
count
最初是
0
,而
getCurrentSize()
返回
num
的值(即
4
)。问题是,当您插入第五次时,
count
是4,并且该语句的计算结果为true。如果希望它第五次失败,则需要一个
而不是
=
(这样当
计数
为4时,它将计算为false)

当您将
num
更改为
5
时,原始语句为true(因为
5>=4
),因此第五次插入成功

旁注:您的
add
函数(当
num
4
时)应该在尝试第五次插入时正确抛出
索引AutofBoundsException
。该修复程序还将解决此问题(因为您不会尝试添加到
thisBag[num]
,这是阵列末尾的一个)。同样,当您将
num
更改为5时,数组足够大,并且不会出现此异常