【问题标题】:JUnit NullPointerExceptionJUnit NullPointerException
【发布时间】:2013-10-28 15:41:53
【问题描述】:

我在尝试测试具有特殊类型的类中的方法时收到 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;
    }
}

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

【问题讨论】:

    标签: java junit stack callstack


    【解决方案1】:

    您的Stack 类需要将条目初始化为一个空列表:

    private List<Entry> entries = new ArrayList<>();
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        entries = new ArrayList<Entry>();
        

        【讨论】:

          猜你喜欢
          • 2017-06-16
          • 1970-01-01
          • 1970-01-01
          • 2020-12-07
          • 1970-01-01
          • 2021-02-16
          • 2014-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多