0

尝试测试具有特殊类型的类中的方法时,我收到 NullPointerException。关于这个例外的原因,我是我们的想法。

public class TestStack {
    private Stack st;
    private Entry en;
    /**
     * @throws java.lang.Exception
     */
    @Before
    public void setUp() throws Exception {
        st = new Stack();
        en = new Entry(1);
    }

    @Test
    public void pushThenTop() {
        st.push(en);
        assertEquals("TEST1: push then Top", 1, st.top());
        fail("Incorrect type");
    }

}

堆栈类

public class Stack {
    private int size;
    private List<Entry> entries;
    public void push(Entry i) {
        entries.add(i);
    }

    public final Entry pop() throws EmptyStackException {
        if (entries.size() == 0) {
            throw new EmptyStackException();
        }
        Entry i = entries.get(entries.size() - 1);
        entries.remove(entries.size() - 1);
        return i;
    }

    public Entry top() throws EmptyStackException {
        return entries.get(entries.size() -1);
    }

    public int size() {
        size = entries.size();
        return size;
    }
}

我正在尝试运行一个返回列表中元素值的测试。

4

3 回答 3

1

您需要entries在对其调用方法之前进行初始化:

entries = new ArrayList<Entry>();
于 2013-10-20T00:37:37.960 回答
1

您获得 NPE 是因为您的代码中有错误。这是单元测试应该找到的东西,所以我建议你修复这个错误。你必须设置entries一些东西,如果你不这样做,你应该期望得到一个 NPE。

关于这个例外的原因,我是我们的想法。

这是您需要查看引发异常的行并询问自己是否使用了任何可能设置null或未设置引用的值?

于 2013-10-20T00:37:47.780 回答
0

您的Stack班级需要将条目初始化为空列表:

private List<Entry> entries = new ArrayList<>();
于 2013-10-20T00:38:59.287 回答