到目前为止,在Dagger 2.11之前,我已经能够构造TestComponent和Modules以便将关键组件注入集成测试中。这对于Api测试和具有大量组件需求的对象非常有用
通常,我会有这样的代码:-
class SpotifyApiTest {
lateinit var spotifyApi : SpotifyApi
@Inject set
lateinit var spotifyHelper : SpotifyIOHelper
@Inject set
@Before
fun setup() {
var context = InstrumentationRegistry.getInstrumentation().context
val testAppComponent = DaggerSpotifyTestComponent.builder()
.spotifyApiModule(SpotifyApiModule(context))
.build()
testAppComponent.inject(this)
}
@Test
......
}
N/B remember to add the following to your gradle build file
kaptAndroidTest "com.google.dagger:dagger-compiler:$daggerVersion"
此方法在Dagger 2.11之前非常有效,但在此版本之后,带有参数化构造函数的模块将无法正常工作,从而无法提供上下文,更不用说应用程序了。那么如何将新的AndroidInjection()功能用于Dagger 2.16的集成测试?
答案 0 :(得分:1)
我想出了以下方法来将上下文注入dagger 2.11+的模块中,所以从头开始,我仍然不知道如何从集成测试的角度来处理应用程序。
@Singleton
@Component(modules = arrayOf(SpotifyAccountsModule::class,SpotifyApiModule::class))
interface SpotifyTestComponent {
fun inject(test: SpotifyApiTest)
fun inject(test: SpotifyAccountApiTest)
@Component.Builder
interface Builder {
@BindsInstance
fun create(context: Context): Builder
fun build(): SpotifyTestComponent
}
}
这将使上下文成为提供者的参数,并在其他人到达此特定砖墙时为他们提供帮助。