2014-10-12 121 views
1
@Test 
public void addElemenInEmptyList() { 
    List<Integer> list = new LinkedList<Integer>(); 
    int data = 122; 
    boolean added = list.add(data); 
    assertNotNull("Object not added", added); 

    Integer addObj = list.get(0); 
    assertNotNull("Object not found", addObj); 
    Assert.assertEquals("Fetched value is different", data, addObj.intValue()); 
} 

我已經寫了小JUnit測試用於測試Java的鏈表(學習JUnits),在上面的JUnit我測試三件事測試場景分離

  1. 列表被modidified(assertNotNull(「對象不添加」 ,增加))
  2. 能夠獲得第一個數據(非空)
  3. 數據添加,獲取並驗證它與傳遞的數據。

此Junit可能因三個不同原因失敗。這是寫作它的一個適當的方法嗎? 可以請你建議任何更好的方法

回答

2

我會建議分裂的方法。我會在一種測試方法中測試api方法的每個方面。我會這樣做,因爲你會從測試中得到一個明確的反饋,說明什麼可行,哪些失敗。例如。

enter image description here

首先來看看你要測試的方法的javadoc。這是合同,測試應始終確保該合同得到滿足。

例如,List.add(E element) javadoc的說:

追加到該列表中(可選操作)的結束指定的元素。

列出支持此操作的列表可能會限制可將哪些元素添加到此列表中。特別是,一些列表將拒絕添加空元素,而其他列表將對可能添加的元素的類型施加限制。列表類應在其文檔中明確指定可添加元素的任何限制。

返回true,如果此集合改變通話

List.add(E element)的javadoc也說,這種方法的一些方面是由實現定義的結果。例如,LinkedList javadoc說

List和Deque接口的雙鏈表實現。實現所有可選的列表操作,並允許所有元素(包括null)。

因此add方法的測試應涵蓋以下方面:

  • null值被允許添加
  • add追加元素到列表返回
  • true結束時,如果該列表改變。

所以我的第一個測試的實施應該是這樣的

public class LinkedListTest { 

    /** 
    * adding <code>null</code> must be possible. 
    */ 
    @Test 
    public void addNullElement() { 
     LinkedList<Integer> list = new LinkedList<Integer>(); 

     boolean added = list.add(null); 
     assertTrue("expected that null was added", added); 
    } 

    /** 
    * adding a not <code>null</code> element must return <code>true</code>. 
    */ 
    @Test 
    public void addNotNullElement() { 
     LinkedList<Integer> list = new LinkedList<Integer>(); 

     boolean added = list.add(Integer.valueOf(1)); 
     assertTrue("expected that element was added", added); 
    } 

    /** 
    * add must append element to the end of the list 
    */ 
    @Test 
    public void addElementToTheEndOfTheList() { 
     LinkedList<Integer> list = new LinkedList<Integer>(); 
     list.add(1); 
     list.add(2); 

     Integer firstElement = list.get(0); 
     assertEquals("expected first element to be 1", Integer.valueOf(1), 
       firstElement); 

     Integer secondElement = list.get(1); 
     assertEquals("expected first element to be 2", Integer.valueOf(2), 
       secondElement); 
    } 

} 

但還有更多。List.add(E element)延伸Collection.add(E element),因爲List延伸Collection。所以你還必須考慮到Collection.add(E element) javadoc。它可能會增加其他方面。儘管如此,您還可以構建測試的層次結構來覆蓋這一點。例如。 LinkedListTest,其延伸AbstractListTest,其延伸AbstractCollectionTest。比你可以把每個接口的測試方面放在適當的抽象測試類中。