单元测试创建与基本方法介绍


创建单元测试


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测试类


EclipsePackage Explorer中用右键点击该类弹出菜单,选择“New —>JUnitTest Case”。如下图所示:



在弹出的对话框中,进行相应的选择,如下图所示:



点击“下一步”后,系统会自动列出你这个类中包含的方法



对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。方法内一般包括三步:准备数据,执行方法,断言校验。


3 断言方法


4 基本注释


每个标签都来自junit


4.1@Test:


标注无参数得单元测试用例方法,实例化测试类,捕获aserrtError异常。


4.2@Before:


 在任何一个测试执行之前必须执行一次的代码


比如:


 @Before
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gifhttp://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif      public void setUp() throws Exception ...{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif           calculator.clear();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif      }


4.3@BeforeClass:


测试执行之前,针对所有测试,只执行一次,而且为static void方法;


4.4@After:


在任何一个测试执行之后必须执行一次的代码


4.5@ After Class:


针对所有测试,只执行一次,而且为static void


方法;


4.6@Ignore


这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”


4.7@RunWIth:


放在测试类名之前,用来确定这个类怎么运行的。也可以不标注,会使用默认运行器。



//此处意为让测试运行于Spring测试环境,使用junit4进行测试  


http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifimport  org.junit.runner.RunWith;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
import
 org.junit.runners.Suite;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif@RunWith(Suite.
class
)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gifhttp://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif@Suite.SuiteClasses(
...
{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif        CalculatorTest.
class
,
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif        SquareTest.
class
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif        } )
//
此处为把所有测试方法集合起来进行打包测试。


4.8@ContextConfiguration 


用来指定加载的Spring配置文件的位置,会加载默认配置文件,  


这种写法是为了让测试在Spring容器环境下执行。


比如常见的 Service  Dao  Action 这些个东西,都在Spring容器里,junit需要将他们拿到,并且使用来测试。


 


5测试异常


  1. 使用@Testexcept属性

  2. 使用try/catchfail属性

  3. 使用exceptedException规则


6测试超时


  1. 使用@Testtimeout属性

  2. 使用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 arrays 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 代码覆盖率


代码覆盖率衡量(以百分比表示)了在运行单元测试时执行的代码量,

使用代码覆盖工具,如 CloverCorbeturaJaCoCoEclEmmaSonar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值