Я думаю, что здесь есть две возможности. Я использовал второй и знаю, что он работает, первый - мое предположение.
(1)
Вы издеваетесь над приложением. Затем вы пытаетесь использовать его applicationContext
, однако вы не издевались над ним. Вам также нужно смоделировать это:
val context = Mockito.mock(Context::class.java)
Mockito.`when`(application.applicationContext).thenReturn(context)
(2)
Предположим, 1) ваш тест является приборным тестом 2) вы используете подкласс Application
- скажем, MyApplication
,
Затем вам нужно будет создать его подкласс - скажем, TestMyApplication
. Следующим шагом будет создание подкласса AndroidJUnitRunner
, может выглядеть следующим образом:
public class MyInstrumentationTestRunner extends AndroidJUnitRunner {
@Override
public Application newApplication(ClassLoader cl, String className, Context context)
throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return Instrumentation.newApplication(TestMyApplication.class, context);
}
}
Наконец, вам нужно указать android, чтобы использовать этот бегун:
allprojects {
ext {
....
testInstrumentationRunner = "com...MyInstrumentationTestRunner"
}
}
Как В результате вышеизложенного контекст приложения будет экземпляром TestMyApplication во всех ваших инструментальных тестах.