Android单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用

注: 代码中的 //<= 表示新加的、修改的等需要重点关注的代码 Class#method表示一个类的instance method,比如 LoginPresenter#login 表示 LoginPresenter的login(非静态)方法。 问题 在前一篇文章中,我们讲述了依赖注入的概念,以及依赖注入对单元测试极其关键的重要性和必要性。在那篇文章的结尾,我们遇到了一个问题,那就是如果不使用DI框架,而全部采用手工来做DI的话,那么所有的Dependency都需要在最上层的client来生成,这可不是件好事情。继续用我们前面的例子来具体说明一下。 假设有一个登录界面,LoginActivity,他有一个LoginPresenter,LoginPresenter用到了UserManager和PasswordValidator,为了让问题变得更明显一点,我们假设UserManager用到SharedPreference(用来存储一些用户的基本设置等)和UserApiService,而UserApiService又需要由Retrofit创建,而Retrofit又用到OkHttpClient(比如说你要自己控制timeout、cache等东西)。 应用DI模式,UserManager的设计如下: public class UserManager { private final SharedPreferences mPref; private final UserApiService mRestAdapter; public UserManager(SharedPreferences preferences, UserApiService userApiService)…

Continue ReadingAndroid单元测试(六):使用dagger2来做依赖注入,以及在单元测试中的应用