Подтвердить что ты не робот

Доступ к контексту приложения из TestSuite в Setup() перед вызовом getActivity()

У меня есть Activity, который вытягивает объект из расширенного класса Application (контекст приложения) из метода OnCreate().

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

Излишне говорить, что когда я вызываю getActivity() из моего расширенного тестового примера ActivityInstrumentationTestCase2, я получаю исключение с нулевым указателем.

Как я могу заполнить контекст до начала действия и сделать его доступным для этого Activity?

Обновлено: После небольшого рытья я обнаружил: this.getInstrumentation().getTargetContext(), а затем применил его к типу расширенного класса Application. Но я получаю исключение класса, а трассировка указывает на это:

04-04 21:02:27.036: INFO/TestRunner(431): started: testIt(edu.rockies.rockies.activity.courses.test.TopicTest)
04-04 21:02:27.126: INFO/TestRunner(431): failed: testIt(edu.rockies.rockies.activity.courses.test.TopicTest)
04-04 21:02:27.126: INFO/TestRunner(431): ----- begin exception -----
04-04 21:02:27.136: INFO/TestRunner(431): java.lang.ClassCastException: android.app.ApplicationContext
04-04 21:02:27.136: INFO/TestRunner(431):     at edu.rockies.rockies.activity.courses.test.TopicTest.setUp(TopicTest.java:27)
04-04 21:02:27.136: INFO/TestRunner(431):     at junit.framework.TestCase.runBare(TestCase.java:125)
04-04 21:02:27.136: INFO/TestRunner(431):     at junit.framework.TestResult$1.protect(TestResult.java:106)
04-04 21:02:27.136: INFO/TestRunner(431):     at junit.framework.TestResult.runProtected(TestResult.java:124)
04-04 21:02:27.136: INFO/TestRunner(431):     at junit.framework.TestResult.run(TestResult.java:109)
04-04 21:02:27.136: INFO/TestRunner(431):     at junit.framework.TestCase.run(TestCase.java:118)
04-04 21:02:27.136: INFO/TestRunner(431):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
04-04 21:02:27.136: INFO/TestRunner(431):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
04-04 21:02:27.136: INFO/TestRunner(431):     at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
04-04 21:02:27.136: INFO/TestRunner(431):     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
04-04 21:02:27.136: INFO/TestRunner(431): ----- end exception -----
04-04 21:02:27.156: INFO/TestRunner(431): finished: testIt(edu.rockies.rockies.activity.courses.test.TopicTest)

this.getInstrumentation().getTargetContext() должен возвращать объект типа context. Но я получаю exeption класса android.app.ApplicationContext, который не имеет смысла.

Обновление 2:

Я сделал еще несколько исследований и обнаружил это для android.app.Application

java.lang.Object
    android.content.Context
        android.app.ApplicationContext
            android.app.Application

Но собственный Google Android Javadoc относится к this:

java.lang.Object
    android.content.Context
        android.content.ContextWrapper
            android.app.Application

Что происходит? Что-то не так.

Обновление 3:

Я заменил следующую строку кода:

this.getInstrumentation().getTargetContext();

с этой строкой кода.

this.getInstrumentation().getTargetContext().getApplicationContext();

Несмотря на то, что контекст разрешается правильно, он, похоже, не совпадает с контекстом активности.

4b9b3361

Ответ 1

Хорошо, эта проблема решена. Чтобы получить доступ к контексту до вызова функции getActivity(), вам необходимо вызвать эту функцию:

Context context = this.getInstrumentation().getTargetContext().getApplicationContext();

Ответ 2

Всегда используйте this.getInstrumentation().getTargetContext() для доступа к контексту приложения.

this.getInstrumentation().getTargetContext().getApplicationContext() не совпадает с this.getInstrumentation().getTargetContext()

Я запускал автоматизацию в версиях 4.0.X и большую часть времени getApplicationContext() возвращал нулевой контекст.