Comments

Mock和mockito

mock

mock是单元测试中处理依赖关系的一种手段,可翻译为模拟,也可解释为替代。它用虚拟的对象代替实际的对象,来隔离类间依赖对单元测试的影响。

Read on →
Comments

C++ Inline

inline申明某个函数为内联展开,提示编译器所有该函数的调用可以直接在调用点展开,而不需要进行堆栈调用。

inline只是一个建议,是否inline由编译器自己决定。

Read on →
Comments

Hamcrest IsEqual实现

学习一下IsEqual类的实现。该Matcher用来比较两个对象是否equal。 核心逻辑在areEqual()方法内。

  1. 首先判断是否都为null
  2. 判断是否为数组。若都是数组,则先比较数组长度是否相等,然后比较数组中元素是否相等,数组元素相等直接递归调用areEqual()方法。因为该数组可能是多维数组,直接调用equals不合理。
  3. 非1,2两种情况直接调用equals()比较。
Read on →
Comments

自定义hamcrest Matcher

当hamcrest matcher无法满足我们需求的时候,需要自己定义matcher.

做法很简单,参照hamcrest.core下面的任何一个Matcher来写就ok.

  1. 定义一个Matcher类,extends BaseMatcher
  2. 重写matchers方法。该方法定义比较器的真正逻辑:怎样比较。
  3. 重写describeTo(Description description). 该方法描述这个matcher,可用于输出错误信息。将需要输出的信息append到description上。 Read on →
Comments

Hamcrest一瞥

hamcrest是一个Matcher库,有java版,python,c++版等。它提供了很多比较器用来比较两个对象。其并不是一个测试框架,只是因为Matcher可以在测试断言中用到,而被测试框架和Mock框架集成,比如Junit4,EasyMock.

hamcrest库由两大部分组成:Matcher和Description。
Matcher体系定义了常用的比较器,比如equal,not,same等,每个core matcher继承BaseMatcher,实现matches方法来做比较。

Description体系用来描述每个Matcher,输出Matcher错误信息。比如expected: is(..), got: ..。

Read on →