JUnit4之隐藏特性"曝光"

来源:互联网 发布:数据库的概念是什么 编辑:程序博客网 时间:2024/05/17 12:21

  只要做Java开发的,99%的都用过JUnit。在JUnit4里面除了@Test, @Before, @BeforeClass这样基本的特性,JUnit4还有些很酷但是大家平时不太用的特性。我这里做一下介绍,大家可以用一下,或者至少把玩一下:) 以下特性都基于4.8版本。


 

  • ParallelComputer: 并行测试

当需要同时测试testcase的时候,你不需要为自己写thread来做这个事情。JUnit4已经有了这个特性,而且还提供多种同步选择。例如:

你有3种同步方式:

1: ParallelComputer.classes():所有测试类同时开始执行,但是每个类里面的方法还是顺序执行。在例子里面ParallelTest1ParallelTest2同时开始,但是各自的a(),b()还是顺序执行。

2: ParallelComputer.methods():测试类顺序执行,但是每个类里面的方法是同时开始执行。在例子里面ParallelTest1a()b()同时开始,等结束之后再开始ParallelTest2

3: new ParallelComputer(true, true):所有测试类里面方法同时开始执行。在例子里面4个方法同时开始执行。

很有意思吧。

 


  • Category: 分类测试

当你有很多testcase,但是你不想每次都执行一遍的时候。你可以把testcase分成若干类,然后就可以分类有选择的来执行这些testcase。

例子:譬如你有2类testcase,一类是重要的用Important.class表示,还有一类不那么重要的用Secondary.class表示。

当你执行后会发现只有Alpha.a()Beta.a()执行到,Alpha.b()@ExcludeCategory掉了。


 

  • MaxCore: 失败优先

  当需要反复测试大量testcase的时候,你往往比较关注那些前一次失败的case。这个时候你就可以利用MaxCore特性在每次执行testcase的时候优先执行那些上次失败的case。

例如:

可以观察到第2次执行的时候Delta.b()由于第1次的失败而提前到了最先执行。

 


 

  • DataPoint: 参数数据

当需要测试不同输入参数的时候是不是要写一大堆testcase?不需要,因为JUnit4提供了参数化测试数据的特性。例如你想要测试2个整型数据作为输入参数的时候:

通过观察test()被执行了4次,每次不同的组合作为参数输入。而且如果参数数目过多,你可以通过@DataPoints一下子把参数都设进去。用过@RunWith(Parameterized.class)的朋友可以和DataPoint做一下比较。


  • TestedOn

这个功能也是参数化数据,只不过它是直接在参数上配置。例如:

结果打印出来"12"

 


 

  • PrintableResult: 打印结果

这个我认为倒是一个小功能,它只是把测试失败的结果以比较美观的格式打出来。例如:

 

 

 

原创粉丝点击