Open alwaystest opened 7 years ago
标签(空格分隔): Android 依赖注入 GoogleSamples
加了小创的单元测试微信群,昨天有一个群友问TODO-MVP项目中Injection.provideTasksRepository(getApplicationContext())这行的用途。
Injection.provideTasksRepository(getApplicationContext())
本来他是问Injection类是怎么出来的。我下意识的以为是又一个APT生成代码的依赖注入框架生成的代码,按照Dagger2的套路,找不到的Injection类,只要编译一次,就可以生成代码了。但是我没有在build.gradle中发现apt有关的内容,或者另一个依赖注入的库。这就奇怪了。
后来下载了Todo-MVP的源码看了一下,没有我想的那么简单。Injection类是已经编写好的。由于使用了MVP,那么要编写单元测试,依赖注入是不可避免的。而这个Injection类就是写来做依赖注入的。比Dagger2简单粗暴。刷新了我的认知。
原理是这样的。
Gradle编译工程的时候,可以使用Flavor(build.gradle中的productFlavors项)来实现差异化打包。通过mock和prod两个Flavor,打包两个不同实现的Injection类,一个返回Mock对象,一个返回真实的依赖对象。这时,只要更改build Variant,就能实现更改依赖注入类型的功能。单元测试时,注入Mock对象,编译APK时,注入真实的依赖对象。
mock
prod
GoogleSamples真是一个学习单元测试的宝库。
从GoogleSamples--android-architecture学到的一种依赖注入方式
标签(空格分隔): Android 依赖注入 GoogleSamples
加了小创的单元测试微信群,昨天有一个群友问TODO-MVP项目中
Injection.provideTasksRepository(getApplicationContext())
这行的用途。本来他是问Injection类是怎么出来的。我下意识的以为是又一个APT生成代码的依赖注入框架生成的代码,按照Dagger2的套路,找不到的Injection类,只要编译一次,就可以生成代码了。但是我没有在build.gradle中发现apt有关的内容,或者另一个依赖注入的库。这就奇怪了。
后来下载了Todo-MVP的源码看了一下,没有我想的那么简单。Injection类是已经编写好的。由于使用了MVP,那么要编写单元测试,依赖注入是不可避免的。而这个Injection类就是写来做依赖注入的。比Dagger2简单粗暴。刷新了我的认知。
原理是这样的。
Gradle编译工程的时候,可以使用Flavor(build.gradle中的productFlavors项)来实现差异化打包。通过
mock
和prod
两个Flavor,打包两个不同实现的Injection类,一个返回Mock对象,一个返回真实的依赖对象。这时,只要更改build Variant,就能实现更改依赖注入类型的功能。单元测试时,注入Mock对象,编译APK时,注入真实的依赖对象。GoogleSamples真是一个学习单元测试的宝库。