2016-08-25 71 views
-1

我有一篇文章描述了類結構a enum static variable reference between java但是當我開始完成測試時,我遇到了一個微不足道的錯誤,我創建了ArrayList,但調試語句顯示了我Class對象是創建的新列表項或構造函數的默認值。枚舉測試junit arraylist被覆蓋reinstantiating不起作用

@Test 
public GoodsTest()   
    clearProductMaps(); 
    Goods item = new Goods(); 
    calendar.set(Calendar.MONTH, Calendar.JULY); 
    calendar.set(Calendar.DAY_OF_MONTH, 21); 
    calendar.set(Calendar.YEAR, 2016); 
    date = calendar.getTime(); 
    item.setName("FirstItem_A"); 
    item.setPrice(4.10); 
    item.setStatus(Library.STATUSES.US); 
    item.setDate(date); 

    actualGoods.add(0,item); 
    item = new Goods(); 
    item.setProductName("FirstItem_A"); 
    item.setPrice(3.70); 
    item.setStatus(Library.STATUSES.ME); 
    calendar.set(Calendar.MONTH, Calendar.AUGUST); 
    date = calendar.getTime(); 
    item.setDate(date); 

    actualGoods.add(item); 
    System.out.println("debug " + actualGoods.get(0).getStatus()); 
} 

我的clearProductMaps只是強制列表是空的測試。

print語句:調試美國

+1

對不起,但不知道你在問什麼。不知道你的測試應該做什麼(「是的,GoodsTest」,但具體是什麼?)指出你的代碼有一個問題:錯誤的命名。變量名稱以小寫字母開頭,「Item」 - 應該是什麼?你也有「goodsItem」。和calendear和日期。只發布沒有變量聲明的測試方法並沒有幫助。請注意:關於您的代碼的任何內容都不是微不足道的**。所有這一切都令人困惑**。然後:如果輸出令你感到困惑;那麼請請:在這裏提供輸出。我們不是巫師! – GhostCat

+0

我們如何知道你看到了什麼?我們如何知道真實物品(0)和實際物品(1)之間的差異;因爲你只顯示你的代碼的一部分。嚴重的是:你應該試着退後一步,首先從你正在做的事情中獲得**混淆**。專注於小方面,並逐個處理它們。 – GhostCat

+2

請發表[mcve] – 2016-08-25 05:44:07

回答

1

兩個不同Good S的顯然setStatus似乎寫同一個領域:當我預計聲明將調試ME 。所以這個字段是static。靜態字段是類對象Good的字段。

正如你所說的枚舉,每個枚舉常量也是一個靜態的全局單例。

enum Status { 
    SLEEPY, 
    ENERGETIC; 

    public int coffee; 
} 

現在這兩個對象都有一個單獨的coffee。分配它對於所有睡眠或ENERGETIC事件都是有效的。 Library.STATUSES.ME/US就是這樣的混亂。

+0

更改爲非靜態字段,它的工作原理。 –