0

我正在用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 测试应该通过,因为前四个测试必须为真,而第五个测试必须为假。但是,由于最后一个断言,我的测试失败了。此外,打印语句(System.out.println(add5); 和 assertEquals(false, added5);)不打印任何内容。看起来测试类没有读取 added5 的值。我多次调试这个小代码但没有成功。请问有什么帮助吗?

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

4

1 回答 1

2

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

if (getCurrentSize() >= count) {

where countis 0,并getCurrentSize()返回num(which is 4) 的值。问题是,当您插入第五次时,count是 4,并且该语句的计算结果为真。如果你想让它第五次失败,你需要 a>而不是 a >=(所以当count是 4 时,它会评估为假)

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

旁注:您的add函数原样(何时num4应该在IndexOutOfBoundsException尝试插入第五次时抛出一个权利。该修复程序还将解决此问题(因为您不会尝试添加到thisBag[num]数组末尾的一个)。同样,当您更改num为 5 时,数组已经足够大,并且您不会收到此异常。

于 2013-09-05T20:31:15.897 回答