Skip to content

Instantly share code, notes, and snippets.

View ericntd's full-sized avatar

Eric Nguyen ericntd

View GitHub Profile
class SomePresenterTest {
@Test
fun doSomeWork() {
val profileRepository = Mockito.mock(ProfileRepository::class.java)
val someRepository = Mockito.mock(SomeRepository::class.java)
val underTest = SomePresenter(
profileRepository,
someRepository
)
// Trigger
class SomeActivity : DaggerAppCompatActivity() {
@Inject
lateinit var somePresenter: SomePresenter
override fun onCreate(savedInstanceState: Bundle?) {
//...
somePresenter.doSomeWork()
}
}
class TheApplication : Application(), HasAndroidInjector {
@Inject
lateinit var injector: DispatchingAndroidInjector<Any>
override fun onCreate() {
super.onCreate()
DaggerAppComponent.create().inject(this)
}
override fun androidInjector(): AndroidInjector<Any> {
@Module
class CommonRepositoryModule {
@Provides
fun providesProfileRepository(): ProfileRepository {
return ProfileRepository()
}
}
@Module(includes = [CommonRepositoryModule::class])
abstract class AppModule {
/**
* Connect SomeActivity's sub-graph to the App's Dependency Graph
*/
@ContributesAndroidInjector(modules = [SomeActivityModule::class])
abstract fun contributeSomeActivity() : SomeActivity
}
class SomeActivity : DaggerAppCompatActivity {
@Inject lateinit var profileRepository: ProfileRepository
fun onCreate() {
//...
presenter = SomePresenter(profileRepository, ...)
presenter.doSomeWork()
}
}
@Module
class SomeActivityModule {
@Provides
fun provideSomeRepository(): SomeRepository {
return SomeRepository()
}
}
@Module(includes = [CommonRepositoryModule::class])
abstract class AppModule {
/**
* Connect SomeActivity's sub-graph to the App's Dependency Graph
*/
@ContributesAndroidInjector(modules = [SomeActivityModule::class]) // HERE
abstract fun contributeSomeActivity() : SomeActivity
}
class SomeActivity : DaggerAppCompatActivity() {
@Inject
lateinit var profileRepository: ProfileRepository
@Inject
lateinit var someRepository: SomeRepository
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
class SomePresenter @Inject constructor(
val profileRepository: ProfileRepository,
val someRepository: SomeRepository
) {
fun doSomeWork() {
println("doSomeWork")
}
}