Mock dagger 2 модуля при использовании factory - PullRequest
0 голосов
/ 26 мая 2020

Я использую android функции с кинжалом 2.

Мой AppComponent выглядит следующим образом:

@Singleton
@Component(modules = [AppModule::class])
interface ApplicationComponent : AndroidInjector<MyApplication> {
    @Component.Factory
    abstract class Builder : AndroidInjector.Factory<MyApplication>
}

И мой AppModule:

@Module(includes = [AndroidInjectionModule::class])
abstract class AppModule {
    @Singleton
    @Binds
    @AppContext
    abstract fun provideContext(app: MyApplication): Context
}

I попробуйте издеваться над этим и другими модулями (когда они появятся). Я читал, что использование @Component.factory лучше, чем Builder, но я не знаю, как его высмеивать.

Я пытался издеваться над SharedPreferences, как показано ниже, но я думаю, что я также должен предоставить издевательский Context.

val sharedPrefs: SharedPreferences = Mockito.mock(SharedPreferences::class.java)
val context: Context = Mockito.mock(Context::class.java)
Mockito.`when`(context.getSharedPreferences(ArgumentMatchers.anyString(), ArgumentMatchers.anyInt())).thenReturn(sharedPrefs)

Mockito.`when`(sharedPrefs.getString(anyString(), anyString())).thenReturn(AuthType.UNDEFINED.toString())

Как имитировать Context и предоставить имитацию SharedPreferences?

1 Ответ

0 голосов
/ 27 мая 2020

Не высмеивайте общие предпочтения или контекст. Мы знаем, что эти android реализации работают, и их не нужно тестировать.

Создайте класс-оболочку, который можно использовать в качестве макета интерфейса для ваших предпочтений для модульного тестирования.

class MyClassPreferences(context: Context) {

    val preferences: SharedPreferences = context.getSharedPreferences("", MODE_PRIVATE)

    fun getPreferenceOne(): String {
        return preferences.getString(KEY, "")
    }

    fun setPreferenceOne(value: String) {
        preferences.edit().putString(KEY, value).commit()
    }

}

В тесте

Mockito.`when`(myClassPreferences.getPreferenceOne()).thenReturn("value")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...