Skip to content

Instantly share code, notes, and snippets.

View prokash-sarkar's full-sized avatar
🎯
Focusing

Prokash Sarkar prokash-sarkar

🎯
Focusing
View GitHub Profile
class DefaultDataRepositoryTest {
@Inject
lateinit var dataRepository: DefaultDataRepository
@Inject
lateinit var remoteDataSource: DataSource
@Before
fun setup() {
val component: TestAppComponent = DaggerTestAppComponent.factory()
.create(TestBaseApplication())
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.example.dagger"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
multiDexEnabled true
class CustomTestRunner : AndroidJUnitRunner() {
override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application {
return super.newApplication(cl, TestBaseApplication::class.java.name, context)
}
}
class TestBaseApplication : BaseApplication() {
override fun initializeDaggerComponent(): AppComponent {
val component: TestAppComponent = DaggerTestAppComponent.factory()
.create(this)
component.inject(this)
return component
}
}
@Singleton
@Component(
modules = [
AndroidInjectionModule::class, NetworkModule::class,
TestAppModule::class, AppModuleBinds::class,
ViewModelBuilderModule::class, ActivityBuildersModule::class
]
)
interface TestAppComponent : AppComponent {
@Component.Factory
@Module
class TestAppModule {
@Singleton
@Provides
fun provideTasksRemoteDataSource(
apiService: ApiService
): DataSource {
return mockk()
}
}
class DefaultDataRepositoryTest {
private val remoteDataSource: DataSource = mockk()
private lateinit var dataRepository: DefaultDataRepository
@Before
fun setup() {
dataRepository = DefaultDataRepository(remoteDataSource)
}
@ExperimentalCoroutinesApi
open class BaseApplication : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return initializeDaggerComponent()
}
open fun initializeDaggerComponent(): AppComponent {
val component: AppComponent = DaggerAppComponent.factory()
.create(this)
component.inject(this)
return component
}
@Singleton
@Component(
modules = [
AndroidInjectionModule::class, NetworkModule::class,
AppModule::class, AppModuleBinds::class,
ViewModelBuilderModule::class, ActivityBuildersModule::class
]
)
interface AppComponent : AndroidInjector<DaggerApplication> {
@Component.Factory
@Module
class NetworkModule {
@Singleton
@Provides
fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor {
return HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY)
}
@Singleton
@Provides