2013-10-20 61 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或引用未设置任何价值?