easymock


单元测试是对应用中的某一个模块的功能进行验证。在单元测试中,我们常遇到的问题是应用中其它的协同模块尚未开发完成,或者被测试模块需要和一些不容易构造、比较复杂的对象进行交互。另外,由于不能肯定其它模块的正确性,我们也无法确定测试中发现的问题是由哪个模块引起的。

Mock 对象能够模拟其它协同模块的行为,被测试模块通过与 Mock 对象协作,可以获得一个孤立的测试环境。此外,使用 Mock 对象还可以模拟在应用中不容易构造(如 HttpServletRequest 必须在 Servlet 容器中才能构造出来)和比较复杂的对象(如 JDBC 中的 ResultSet 对象),从而使测试顺利进行。

EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。

mock过程大致可以划分为以下几个步骤:
    * 使用 EasyMock 生成 Mock 对象;
    * 设定 Mock 对象的预期行为和输出;
    * 将 Mock 对象切换到 Replay 状态;
    * 调用 Mock 对象方法进行单元测试;
    * 对 Mock 对象的行为进行验证。
使用 EasyMock 生成 Mock 对象
A a = EasyMock.createMock(A.class);
设定 Mock 对象的预期行为和输出
    * 对 Mock 对象的特定方法作出调用;
    * 通过 org.easymock.EasyMock 提供的静态方法 expectLastCall 获取上一次方法调用所对应的 IExpectationSetters 实例;
    * 通过 IExpectationSetters 实例设定 Mock 对象的预期输出。
Mock 对象的行为可以简单的理解为 Mock 对象方法的调用和方法调用所产生的输出。Mock 对象方法的调用可能产生两种类型的输出:(1)产生返回值andReturn;(2)抛出异常andThrow。
设定预期方法调用次数 times(int minTimes, int maxTimes);
对 Mock 对象的行为进行验证 verify();
Mock 对象的重用 reset();要对 Mock 对象重新初始化.
EasyMock 预定义的参数匹配器
anyObject 方法表示任意输入值都与预期值相匹配。除了 anyObject 以外,EasyMock还提供了多个预先定义的参数匹配器,其中比较常用的一些有:

    * aryEq(X value):通过Arrays.equals()进行匹配,适用于数组对象;
    * isNull():当输入值为Null时匹配;
    * notNull():当输入值不为Null时匹配;
    * same(X value):当输入值和预期值是同一个对象时匹配;
    * lt(X value), leq(X value), geq(X value), gt(X value):当输入值小于、小等于、大等于、大于预期值时匹配,适用于数值类型;
    * startsWith(String prefix), contains(String substring), endsWith(String suffix):当输入值以预期值开头、包含预期值、以预期值结尾时匹配,适用于String类型;
    * matches(String regex):当输入值与正则表达式匹配时匹配,适用于String类型。
参考:
https://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/

你可能感兴趣的:(正则表达式,jdbc,单元测试,OS,OpenSource)