单元测试是什么?
  单元测试 是针对  程序的小单元 来进行正确性检验的测试工作。程序单元是应用的小可测试部件。一个单元可能是 单个程序、类、对象、方法 等。 ——维基百科
  为什么要做单元测试?
  卖个关子,看完文章自然知道了
  原来和很多人一样并没有写单元测试的习惯,写好一个功能模块之后直接在真机上做自测,看看刚写的功能是否和预期一致,如果不一致,从头debug找问题出在哪儿,没问题提交测试,测试测出问题,再从头debug找问题出在哪儿。这个过程一般会比较费时,但一直以来都这么干,也没发现有什么问题。
  后来看到一些安利单元测试的文章,被洗脑似的决定开始写单元测试。
  然后,没有然后了。
  原来所有的代码逻辑都在Activity里,如何写单元测试?瞬间懵逼了。
  很多公司或个人不愿意写单元测试的原因可能是觉得写单元测试并没用有什么卵用,项目比较赶根本没有时间写单元测试,不知道从何下手,特别是 Android 应用更是比较难写单元测试。
  后来看到有文章说使用MVP模式可以方便的写单元测试,而且可以使用Junit写单元测试,直接运行在JVM上,而不需要运行在Android环境中。
  然后有了这篇文章 《如何将原项目重构成MVP模式》
  开始实践
  写了这么多铺垫,终于可以开始操刀写单元测试了,各位看官是不是已经急不可耐了。
  拿这个类开始写单元测试吧:
public class CreditCardPresenter extends BasePresenter<CreditCardContract.View, CreditCardContract.Model> implements CreditCardContract.Presenter {
//其他代码略
public void getCreditCards() {
getModel().getCreditCards()
.subscribe(new Subscriber<List<CreditCard>>(){
@Overridec
public void onNext(List<CreditCard> creditCards) {
getView().showCreditCards(creditCards);
}
@Override
public void onCompleted() {
getView().loadCompleted();
}
@Override
public void onError(Throwable e) {
getView().showError(e);
}
});
}
}
  功能很简单,是获取信用卡列表,如果获取成功通过下面的代码显示:
  getView().showCreditCards(creditCards);
  getView().loadCompleted();
  如果出错,则通知页面显示错误信息:
  getView().showError(e);