Запустите второе действие внутри TestCase (которое не является тестируемым действием) - PullRequest
5 голосов
/ 07 августа 2011

Как я могу запустить вторую (фиктивную) операцию в ActivityInstrumentationTestCase2 или InstrumentationTestCase?

Моя проблема заключается в следующем:

Intent intent = new Intent(getInstrumentation().getContext(), MyMock.class);
myMock = (MyMock) getInstrumentation().startActivitySync(intent);

... приводит к ошибке "намерение в процессе... разрешает другой процесс ... тест ".Использование getTargetContext () для Intent приводит к «неспособности разрешить действия для Intent», так как мой фиктивный класс не является частью пакета приложения.

08-07 19:38:25.822: INFO/TestRunner(2656): ----- begin exception -----
08-07 19:38:25.822: INFO/TestRunner(2656): java.lang.RuntimeException: Unable to resolve activity for: Intent { cmp=com.cocktails/.test.recipes.RecipeBookMock }
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.app.Instrumentation.startActivitySync(Instrumentation.java:447)
08-07 19:38:25.822: INFO/TestRunner(2656):     at com.cocktails.test.recipes.RecipeUpdaterTest.testNewRecipe(RecipeUpdaterTest.java:55)
08-07 19:38:25.822: INFO/TestRunner(2656):     at java.lang.reflect.Method.invokeNative(Native Method)
08-07 19:38:25.822: INFO/TestRunner(2656):     at java.lang.reflect.Method.invoke(Method.java:521)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:191)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:181)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestCase.runBare(TestCase.java:127)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestResult$1.protect(TestResult.java:106)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestResult.runProtected(TestResult.java:124)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestResult.run(TestResult.java:109)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestCase.run(TestCase.java:118)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:164)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:151)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:425)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1520)
08-07 19:38:25.832: INFO/TestRunner(2656): ----- end exception -----

1 Ответ

3 голосов
/ 23 октября 2012

Тестовые приложения не являются «приложениями» в традиционном смысле и не могут начинать свои собственные действия. Если вам нужно проверить, как ваша активность реагирует на другие действия, отправляющие ее намерения, вы можете использовать метод ActivityInstrumentationTestCase2.setActivityIntent (Intent), чтобы внедрить различные намерения, которые вы хотите проверить, прежде чем вы на самом деле вызовете getActivity ().

public class ExampleTest extends ActivityInstrumentationTestCase2 {

    // if your test runs on the UI thread, you will need to setActivityIntent() 
    // in setUp() as you won't have a chance to do it before the activity
    // is started

    // @UiThreadTest
    public void testMockIntent() {
        setActivityIntent(new Intent());
        Activity foo = getActivity();

        assertNotNull(foo); // your tests
    }
}
...