Junit的有趣问题

0 views
Skip to first unread message

singba

unread,
Feb 25, 2007, 8:02:22 PM2/25/07
to JSF/AJAX技术讨论
今天写了个小测试:
public class ArrayListTest extends TestCase{
private List<String> list=null;
public void setUp(){
list=new ArrayList<String>();
}
public void testAddElement(){
assertFalse(list.contains("junit"));
list.add("junit");
assertTrue(list.contains("junit"));
list.add("junit2");
}
public void testRemoveElement(){
assertEquals(0,list.size());//在这里,list的size居然是0,而不是2,也就是说,前一个测试向list中
加如的元素在这个测试中是不存在的.Junit中,不同的测试究竟是怎么样执行的呢?这个以前还没有注意过.难道是每执行一个测试方法,都执行一遍
setUp()方法?

list.add("junit");
assertTrue(list.contains("junit"));
list.remove("junit");
assertFalse(list.contains("junit"));
}
}

singba

unread,
Feb 25, 2007, 8:08:23 PM2/25/07
to JSF/AJAX技术讨论
为了验证,添加了几行代码:

public class ArrayListTest extends TestCase{
private List<String> list=null;
public void setUp(){
list=new ArrayList<String>();
System.out.println("执行setUp方法");
}
public void testAddElement(){
System.out.println("执行testAddElement方法");

assertFalse(list.contains("junit"));
list.add("junit");
assertTrue(list.contains("junit"));
list.add("junit2");
}
public void testRemoveElement(){
System.out.println("执行testRemoveElement方法");
assertEquals(0,list.size());

list.add("junit");
assertTrue(list.contains("junit"));
list.remove("junit");
assertFalse(list.contains("junit"));
}
}

果然输出如下:
执行setUp方法
执行testAddElement方法
执行setUp方法
执行testRemoveElement方法

看来每执行一个test方法,都会去执行一下setUp方法.

看了一下TestCase的源代码,里面有这样一段:
public void runBare() throws Throwable {
setUp();
try {
runTest();
}
finally {
tearDown();
}
}
这是一个Template pattern,它说明每执行一个test方法,都要先执行setUp()方法,然后最后执行tearDown方法.

Reply all
Reply to author
Forward
0 new messages