您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
循序渐进学习JUnit
作者:网络转载 发布时间:[ 2012/11/29 14:45:03 ] 推荐标签:

测试方法的主体通过验证assertion(断言)对被测方法进行询问。例如,在toString()实施的测试方法中,你希望确认该方法已经对时间的设定进行了很好的说明(对于UNIX系统来说,初问世的时间为1970年1月1日的午夜)。要实施assertion,你可以使用Junit框架提供的assertion方法。这些方法在该框架的junit.framework.Assert类中被实施,并且可以在你的测试中被访问,这是因为Assert是TestCase的父类。这些方法可与Java中的关键字assert(是在J2EE 1.4中新出现的)相比。一些assertion方法可以检查原始类型(如布尔型、整型等)之间或对象之间是否相等(利用equals()方法检查两个对象是否相等)。其他assertion方法检查两个对象是否相同、一个对象是否为"空"或"非空",以及一个布尔值(通常由一个表达式生成)是"真"还是"假"。在表 1中对这些方法进行了总结。

对于那些采用浮点类型或双精度类型参数的assertion,存在一个第三种方法,即采用一个delta值作为参数进行比较。另外还要注意,assertEquals()和assertSame()方法一般不会产生相同的结果。(两个具有相同值的字符串可以不相同,因为它们是两个具有不同内存地址的不同对象。)因此,assertEquals()将会验证assertion的有效性,而assertSame()则不会。注意,对于表 1 中的每个assertion方法,你还有一种选择,是引入另一个参数,如果assertion失败,该参数会给出一条解释性消息。例如,assertEquals(int 期望值, int 实际值)可以与一个诸如assertEquals(字符串消息,int期望值,int实际值)的消息一起使用。

当一个assertion失败时,该assertion方法会抛出一个AssertFailedError或ComparisonFailure。AssertionFailedError由java.lang.Error继承而来,因此你不必在测试方法的throws语句中对其进行声明。而ComparisonFailure由AssertionFailedError继承而来,因此你也不必对其进行声明。因为当一个assertion失败时会在测试方法中抛出一个错误,所以后面的assertion将不会继续运行。框架捕捉到这些错误并认定该测试已经失败后,会打印出一条说明错误的消息。这个消息由assertion生成,并且被传递到assertion方法(如果有的话)。

现在将下面一行语句添加到testIsoDate()方法的末尾:

assertEquals("This is a test",1,2);
 

现在编译并运行测试:

$ javac *.java
$ java junit.textui.TestRunner IsoDateTest
.F.
Time: 0,348
There was 1 failure:
1) testIsoDate(IsoDateTest)junit.framework
.AssertionFailedError: This is a test expected:<1> but was:<2>
      at IsoDateTest.testIsoDate
      (IsoDateTest.java:29)

FAILURES!!!
Tests run: 2,  Failures: 1,  Errors: 0
 

JUnit为每个已处理的测试打印一个点,显示字母"F"来表示失败,并在assertion失败时显示一条消息。此消息由你发送到assertion方法的注释和assertion的结果组成(自动生成)。从这里可以看出assertion方法的参数顺序对于生成的消息非常重要。第一个参数是期望值,而第二个参数则是实际值。

如果在测试方法中出现了某种错误(例如,抛出了一个异常),该工具会将其显示为一个错误(而不是由assertion失败而产生的一个"失败")。现在对IsoDateTest类进行修改,以将前面增加的一行语句用以下语句代替:

throw new Exception("This is a test");
 

然后编译并运行测试:

$ javac *.java
$ java junit.textui.TestRunner IsoDateTest
.E.
Time: 0,284
There was 1 error:
1) testIsoDate(IsoDateTest)java.lang.
   Exception: This is a test at IsoDate
   Test.testIsoDate(IsoDateTest.java:30)

FAILURES!!!
Tests run: 2,  Failures: 0,  Errors: 1
 

该工具将该异常显示为一个错误。因此,一个错误表示一个错误的测试方法,而不是表示一个错误的测试实施。

Assert类还包括一个fail()方法(该版本带有解释性消息),该方法将通过抛出AssertionFailedError来中断正在运行的测试。当你希望一个测试失败而不会调用一个判定方法时,fail()方法是非常有用的。例如,如果一段代码应当抛出一个异常而未抛出,那么可以调用fail()方法使该测试失败,方法如下:

public void testIndexOutOfBounds() {
  try {
       ArrayList list=new ArrayList();
       list.get(0);
       fail("IndexOutOfBoundsException  
           not thrown");
  } catch(IndexOutOfBoundsException e) {}
}
 

上一页12345下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd