Java 测试场景分离 @测试 public void addlemeninEmptyList(){ 列表=新建LinkedList(); int数据=122; 添加的布尔值=list.add(数据); assertNotNull(“未添加对象”,已添加); 整数addObj=list.get(0); assertNotNull(“未找到对象”,addObj); Assert.assertEquals(“获取的值不同”,data,addObj.intValue()); }
我已经编写了用于测试Java链接列表(用于学习JUnits)的小型JUnit测试,在上面的JUnit中,我测试了三件事Java 测试场景分离 @测试 public void addlemeninEmptyList(){ 列表=新建LinkedList(); int数据=122; 添加的布尔值=list.add(数据); assertNotNull(“未添加对象”,已添加); 整数addObj=list.get(0); assertNotNull(“未找到对象”,addObj); Assert.assertEquals(“获取的值不同”,data,addObj.intValue()); },java,unit-testing,junit4,Java,Unit Testing,Junit4,我已经编写了用于测试Java链接列表(用于学习JUnits)的小型JUnit测试,在上面的JUnit中,我测试了三件事 列表已修改(assertNotNull(“未添加对象”,已添加)) 能够获取第一个数据(非空) 添加数据,尝试获取它,并使用传递的数据验证它 这个Junit可能会因为三个不同的原因而失败。这是写它的正确方法吗? 请你提出更好的方法好吗?我建议你把这个方法分开。我将在一个测试方法中测试方法api的每个方面。我会这样做,因为你会从你的测试中得到关于哪些有效,哪些失败的清晰反馈。例如
请你提出更好的方法好吗?我建议你把这个方法分开。我将在一个测试方法中测试方法api的每个方面。我会这样做,因为你会从你的测试中得到关于哪些有效,哪些失败的清晰反馈。例如 首先看一下要测试的方法的javadoc。这是合同,测试应始终确保履行合同 例如,javadoc说: 将指定的元素追加到此列表的末尾(可选操作) 支持此操作的列表可能会限制哪些元素可以添加到此列表中。特别是,一些列表将拒绝添加空元素,而其他列表将对可能添加的元素类型施加限制。列表类应在其文档中明确指定对可能添加的元素的任何限制 如果此集合因调用而更改,则返回true
List.add(E元素)
javadoc还指出此方法的某些方面是由实现定义的。例如,LinkedList javadoc说
列表和Deque接口的双链表实现。实现所有可选的列表操作,并允许所有元素(包括null)
因此,add方法的测试应包括以下方面:
允许添加值null
将元素追加到列表的末尾add
- 如果列表更改,则返回
true
@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());
}
但还有更多。List.add(E元素)
扩展,因为List
扩展了Collection
。因此,您还必须考虑Collection.add(E元素)
javadoc。它可能会增加其他方面。然而,您也可以构建测试的层次结构来覆盖这一点。例如,LinkedListTest
扩展了AbstractListTest
扩展了AbstractCollectionTest
。然后,您可以将每个接口的测试方面放在适当的抽象测试类中
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);
}
}