2017-02-12 82 views
2

我有了一種方法記住產品單元測試沒有消氣

private List<Product> products = new CopyOnWriteArrayList<>(); 
void registerProduct(Product p) { 
    products.add(p); 
} 

軸承是私人,沒有消氣,並在類中創建一個一流的呼叫ProductRegister私人收藏,怎麼辦我的單元測試此?我曾考慮添加一個getter,但是不是揭示了我不想讓別人知道的內部邏輯?

+0

它的私人你想在那裏測試什麼?如果確實需要它,那麼唯一的辦法就是剔除你的列表。不過話雖如此,爲了使其可測試,我會注入'List '而不是ProductRegister實例化它。 – SMA

+0

@TheCoder該方法似乎並沒有太多的工作要進行測試。也就是說,您始終可以將該方法標記爲受保護或默認訪問,而不是將其設置爲公開。 – CKing

+0

大概你有其他方法檢索註冊產品? – ayahuasca

回答

2

你想單元測試你的班級ProductRegister,而不是CopyOnWriteArrayList。所以問題必須是如何測試方法registerProduct(Product)是否應該做。您沒有返回值,所以我會結合其他方法對其進行測試。也許你有另一種方法返回註冊產品,以便您可以assertTrue(<registeredProducts>.contains(product))

edit:這樣,如果更改實現(例如使用另一個集合而不是CopyOnWriteArrayList),則不必更改JUnit測試。

+0

這正是我所擁有的 - 我有一個名爲getProducts(long id)的方法,我將與register()一起使用; – TheCoder