本篇讲述如何在 JUnit 4 下正确测试异常,我会从 try..catch 的方式谈起,然后说到 @Test(expected=Exception.class), 最后论及 @Rules public ExpectedException 的实现方式,最终基本可确定用 @Rules 是最方便的。
我们在用 JUnit 测试方法异常的时候,最容易想到的办法就是用 try...catch 去捕获异常,需要断言以下几个条件:
1. 确实抛出的异常
2. 抛出异常的 Class 类型
3. 抛出异常的具体类型,一般检查异常的 message 属性中包含的字符串的断定所以常用的代码你可能会这么写:
1@Test 2public void passwordLengthLessThan6LettersThrowsException(){ 3 try{ 4 Password.validate("123"); 5 fail("No exception thrown."); 6 }catch(Exception ex){ 7 assertTrue(ex instanceof InvalidPasswordException); 8 assertTrue(ex.getMessage().contains("contains at least 6")); 9 } 10}这里被测试的方法是 Password.validate() 方法是否抛出了相应的异常,注意这里别漏 try 中的
fail("No Exception thrown.") Read More
这是当年用 JBuilder 的时候,创建测试用例自动建立的代码布局。 Read More
- 关键Ant的build文件如下(已加上比较详细的说明)下面以后也会加上测试报告的贴图的。
1<?xml version="1.0" encoding="UTF-8"?> 2<project basedir="." default="main" name="excute TestCase and build test report"> 3 <!-- 测试报告存放目录 --> 4 <property name="build.reports.dir" value="${basedir}/report" /> 5 <target name="main"> 6 <!-- 删除测试报告数据,重新生成 --> 7 <delete> 8 <fileset dir="${basedir}/report"> 9 <include name="*.*" /> 10 </fileset> 11 </delete> 12 <junit fork="yes" printsummary="true"> 13 <!-- 生成的class目录以及执行TestCase所依赖的库 14 无论是用<test>还是<batchtest>都要这个配置 --> 15 <classpath location="${basedir}/bin" /> 16 <!-- 生成报告数据的格式,可能多个,支持xml/brief/plain --> 17 <formatter type="xml" /> 18 <formatter type="brief" usefile="false" /> 19 <!-- 可以用<test>也可以用<batchtest>,但两种的设置有一些区别 20 以下<test>和<batchtest>三种形式用某一种就可以的 --> 21 <!-- name指定Class的名称,如CatTest或com.unmi.CatTest --> 22 <test name="CatTest" todir="${build.reports.dir}" /> 23 <!-- 注意其中<fileset>的dir属性及<include>的name属性指代的意义 --> 24 <batchtest todir="${build.reports.dir}"> 25 <!-- dir属性指定TestCase类的源代码的路径 --> 26 <fileset dir="${basedir}/src"> 27 <!-- name属性指定TestCase源文件规则 --> 28 <include name="**/*Test.java" /> 29 </fileset> 30 </batchtest> 31 <!-- 上面的<batchtest>还可以写成如下形式,<fileset>按指定为class 32 注意其中<fileset>的dir属性及<include>的name属性指代的意义 --> 33 <batchtest todir="${build.reports.dir}"> 34 <!-- dir属性指定TestCase类的路径 --> 35 <fileset dir="${basedir}/bin"> 36 <!-- name属性指定TestCase类文件规则 --> 37 <include name="**/*Test.class" /> 38 </fileset> 39 </batchtest> 40 </junit> 41 <!-- 用执行以上TestCase生成的报告数据生成测试报告 --> 42 <junitreport todir="${build.reports.dir}"> 43 <fileset dir="${build.reports.dir}"> 44 <include name="TEST-*.xml" /> 45 </fileset> 46 <!-- 指定生成测试报告的格式frames/noframes,和报告存放目录 --> 47 <report format="frames" todir="${build.reports.dir}" /> 48 </junitreport> 49 </target> 50</project>