加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

fillInStackTrace用法

(2013-02-22 11:40:07)
分类: 小技巧
在Junit源码中,在TestCase类中runTest方法中有关fillInStackTrace用法(如下图),以前没用过,在网上搜索并进行简单测试
http://s13/mw690/6e0d9475gd649ef36d06c&690

测试代码:

public classThrowableTest {

    Throwable th = new Throwable();;

    public ThrowableTest() {

      System.out.println("in constructor");

   }

    public void a() {

      c();

   }

    public void b() {

      System.out.println("in b");

      th.fillInStackTrace();

      th.printStackTrace(System.out);

      System.out.println("in b");

   }

    public void c() {

      b();

      th.fillInStackTrace();

      System.out.println("in c");

      th.printStackTrace(System.out);

      System.out.println("in c");

   }

    public static void main(String[] args) {

      ThrowableTest t = newThrowableTest();

      t.a();

   }

}

测试过程,直接执行代码

执行结果:

 

in constructor

in b

java.lang.Throwable

    at com.wonew.junit.ThrowableTest.b(ThrowableTest.java:17)

    at com.wonew.junit.ThrowableTest.c(ThrowableTest.java:23)

    at com.wonew.junit.ThrowableTest.a(ThrowableTest.java:12)

    at com.wonew.junit.ThrowableTest.main(ThrowableTest.java:32)

in b

in c

java.lang.Throwable

    at com.wonew.junit.ThrowableTest.c(ThrowableTest.java:24)

    at com.wonew.junit.ThrowableTest.a(ThrowableTest.java:12)

    at com.wonew.junit.ThrowableTest.main(ThrowableTest.java:32)

in c

 结论:

       fillInStackTrace每次执行的时候,会清空原来的栈内的trace信息。然后在当前的调用位置处重新建立trace信息, 所以在方法b()中printStackTrace的执行结果跟c()中的是不一样的。
       b()方法被c()调用,c()被a()调用,a()被main()调用, 所以在b()中fillInStackTrace时,栈内会包含b(), a(), main()的信息;而在c()中调用fillInStackTrace时,栈内的信息会被刷新为c(), a(), main()。

再次测试:

测试过程:将c()方法中的th.fillInStackTrace();注销掉,再次执行

再次执行结果如下:

 

in constructor

in b

java.lang.Throwable

    at com.wonew.junit.ThrowableTest.b(ThrowableTest.java:17)

    at com.wonew.junit.ThrowableTest.c(ThrowableTest.java:23)

    at com.wonew.junit.ThrowableTest.a(ThrowableTest.java:12)

    at com.wonew.junit.ThrowableTest.main(ThrowableTest.java:32)

in b

in c

java.lang.Throwable

    at com.wonew.junit.ThrowableTest.b(ThrowableTest.java:17)

    at com.wonew.junit.ThrowableTest.c(ThrowableTest.java:24)

    at com.wonew.junit.ThrowableTest.a(ThrowableTest.java:12)

    at com.wonew.junit.ThrowableTest.main(ThrowableTest.java:32)

in c

 结论:

通过再次测试证明了上一次执行后猜测的结论是正确的。

在Junit使用fillInStackTrace大概也是为了添加失败时,清空异常栈中的trace信息,重新建立新的trace信息

注:本文信息参照http://blog.163.com/tangyang_personal/blog/static/4622961320082244322236/


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有