2013-10-20 65 views
0

當我試圖在一個特殊類型的類中測試一個方法時,我得到一個NullPointerException。對於這個例外的原因,我是我們的想法。JUnit空指針異常

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"); 
    } 

} 

Stack類

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; 
    } 
} 

我想運行一個測試,返回列表中元素的值。

回答

0

Stack類需要輸入初始化爲空列表:

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

你需要它調用一個方法之前初始化entries

entries = new ArrayList<Entry>(); 
1

您購買的NPE,因爲你必須在你的代碼中的錯誤。這是單元測試應該找到的東西,所以我建議你修復這個錯誤。你必須設置entries,如果你不這樣做,你應該期望得到一個NPE。

我是我們對這個例外的原因的想法。

這就是你需要看看那裏的異常被拋出線,並問自己是否有使用這可能是null或引用未設置任何價值?