Интеграционное тестирование IdentityServer4 с хранилищами InMemory

Насколько я знаю, я не уверен, что мы можем объединить весь модуль, но мы можем издеваться над зависимостями, предоставляемыми модулем. Я достиг этого: мне нужно высмеять DataModule для тестирования пользовательского интерфейса, поэтому я создал этот TestDataModule и предоставил mocks для зависимости.

import com.nhaarman.mockito_kotlin.mock
import dagger.Module
import dagger.Provides
import javax.inject.Singleton

@Module
class TestDataModule {

    @Provides
    @Singleton
    fun providesDataRepository(): DataRepository {
        return mock()
    }
}

Здесь TestApplicationModule

@Module
abstract class TestApplicationModule {

    @Binds
    abstract fun bindContext(application: Application): Context
}

И создал TestApplicationComponent, который возьмет необходимые модули

@Singleton
@Component(modules = [
    (AndroidSupportInjectionModule::class),
    (TestApplicationModule::class),
    (UIModule::class),
    (PresentationModule::class),
    (TestDataModule::class)])
interface TestApplicationComponent {

    // Here you can add additional direct mock 
    // classes to access them directly from component reference
    fun dataRepository(): DataRepository 


    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): TestApplicationComponent.Builder

        fun build(): TestApplicationComponent
    }

    fun inject(app: TestAppplication)
}

Мне пришлось тестировать интерфейс с помощью Android JUnit Test runner и espresso, поэтому я использовал UIModule и Presentation Module, как есть (Can not макет, как хотелось бы проверить). Поэтому нужно издеваться над другими зависимостями, которые не являются частью этих тестов модуля UI, такими как DataRepository

. Вы можете добавить другие модули, такие как CacheModule и RemoteModules, как макеты, поскольку они не играют никакой роли в тестировании модулей UI.

Наконец, создайте DaggerTestApplicationComponent в TestApplication, как это,

class TestApplication : Application(), HasActivityInjector {

    @Inject lateinit var activityInjector: DispatchingAndroidInjector<Activity>
    private lateinit var appComponent: TestApplicationComponent

    override fun onCreate() {
        super.onCreate()
        appComponent = DaggerTestApplicationComponent.builder()
                .application(this)
                .build()
        appComponent.inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> = activityInjector
}

Итак, теперь DaggerTestApplicationComponent будет генерировать требуемый граф зависимостей.

Примечание: требуется закройте все методы, вызванные издеваемыми зависимостями

0
задан Platypus Maximus 19 January 2019 в 14:04
поделиться