二创建单元测试
1 引入junit包
对于meavn管理工程依赖得情况下,直接在pom.xml文件中添加<dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
对于一般的java project项目添加方法如下:
右键项目—属性—在弹出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮,点击next,然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。
2 生成JUnit测试类
在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择“New —>JUnitTest Case”。如下图所示:
在弹出的对话框中,进行相应的选择,如下图所示:
点击“下一步”后,系统会自动列出你这个类中包含的方法
对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。方法内一般包括三步:准备数据,执行方法,断言校验。
3 断言方法
4 基本注释
每个标签都来自junit包
4.1@Test:
标注无参数得单元测试用例方法,实例化测试类,捕获aserrtError异常。
4.2@Before:
在任何一个测试执行之前必须执行一次的代码
比如:
@Before
public void setUp() throws Exception ...{
calculator.clear();
}
4.3@BeforeClass:
测试执行之前,针对所有测试,只执行一次,而且为static void方法;
4.4@After:
在任何一个测试执行之后必须执行一次的代码
4.5@ After Class:
针对所有测试,只执行一次,而且为static void
方法;
4.6@Ignore
这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”
4.7@RunWIth:
放在测试类名之前,用来确定这个类怎么运行的。也可以不标注,会使用默认运行器。
//此处意为让测试运行于Spring测试环境,使用junit4进行测试
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class )
@Suite.SuiteClasses( ... {
CalculatorTest. class ,
SquareTest. class
} )
//此处为把所有测试方法集合起来进行打包测试。
4.8@ContextConfiguration
用来指定加载的Spring配置文件的位置,会加载默认配置文件,
这种写法是为了让测试在Spring容器环境下执行。
比如常见的 Service Dao Action , 这些个东西,都在Spring容器里,junit需要将他们拿到,并且使用来测试。
5测试异常
-
使用@Test得except属性
-
使用try/catch和fail属性
-
使用exceptedException规则
6测试超时
-
使用@Test的timeout属性
-
使用timeout规则
7 Hamcrest匹配器
Hamcrest是一个为了测试为目的,且能组合成灵活表达式的匹配器类库。
hamcrest常用的匹配器:
核心:
anything - 总是匹配,如果你不关心测试下的对象是什么是有用的
describedAs - 添加一个定制的失败表述装饰器
is - 改进可读性装饰器 - 见下“Sugar”
逻辑:
allOf - 如果所有匹配器都匹配才匹配,像Java里的&&
anyOf - 如果任何匹配器匹配就匹配,像Java里的||
not - 如果包装的匹配器不匹配器时匹配,反之亦然
对象:
equalTo - 测试对象相等使用Object.equals方法
hasToString - 测试Object.toString方法
instanceOf, isCompatibleType - 测试类型
notNullValue, nullValue - 测试null
sameInstance - 测试对象实例
Beans:
hasProperty - 测试JavaBeans属性
集合:
array - 测试一个数组元素test an array’s elements against an array of matchers
hasEntry, hasKey, hasValue - 测试一个Map包含一个实体,键或者值
hasItem, hasItems - 测试一个集合包含一个元素
hasItemInArray - 测试一个数组包含一个元素
数字:
closeTo - 测试浮点值接近给定的值
greaterThan, greaterThanOrEqualTo, lessThan,lessThanOrEqualTo - 测试次序
文本:
equalToIgnoringCase - 测试字符串相等忽略大小写
equalToIgnoringWhiteSpace - 测试字符串忽略空白
containsString, endsWith, startsWith - 测试字符串匹配
8 使用 EasyMock 更轻松地进行测试
开放源码 mock 对象框架模拟接口、类和异常
9 代码覆盖率
代码覆盖率衡量(以百分比表示)了在运行单元测试时执行的代码量,
使用代码覆盖工具,如 Clover,Corbetura,JaCoCo,EclEmma或Sonar