2014-10-12 70 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。比你可以把每个接口的测试方面放在适当的抽象测试类中。