5

我目前正在努力在实现 LoaderManager.LoaderCallbacks 的 Android ListActivity 上实现功能测试。这个 Activity 有一个简单的布局,它有一个 EditText 供用户输入一些字符串,还有一个 ListView 是通过 Custom CursorAdapter 填充的,它从 Custom Content Provider 获取数据,并使用 LoadManager 自动更新列表视图内容它改变。

此 ListActivity 的预期功能仅供用户在 EditText 上输入一些内容并从 ListView 中选择一个或多个项目。

为了实现这个功能测试,我使用了 Expresso,下面是我的实现:

public class NewWordActivityFunctionalTest extends ActivityInstrumentationTestCase2<NewWordActivity>{

    public NewWordActivityFunctionalTest() {
        super(NewWordActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        getActivity();
    }

    public void testFillNewThemeFormAndSubmit() throws InterruptedException {
        onView(withId(R.id.submit_new_word_button))
        .perform(click());
    }
}

如果我运行它,我得到的错误堆栈跟踪如下:

com.google.android.apps.common.testing.ui.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:579)
at com.google.android.apps.common.testing.ui.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:69)
at com.google.android.apps.common.testing.ui.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:40)
at com.google.android.apps.common.testing.ui.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:159)
at com.google.android.apps.common.testing.ui.espresso.ViewInteraction.doPerform(ViewInteraction.java:90)
at com.google.android.apps.common.testing.ui.espresso.ViewInteraction.perform(ViewInteraction.java:73)
at pt.consipere.hangman.ui.test.NewWordActivityFunctionalTest.testFillNewThemeFormAndSubmit(NewWordActivityFunctionalTest.java:36)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onStart(GoogleInstrumentationTestRunner.java:167)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

此测试设置与我在我的应用程序的其他功能测试中使用的相同,运行良好,这让我认为问题可能出在测试初始化​​上,因为其他测试的唯一区别是该活动正在使用一个 CursorAdapter 和 LoadManager。

如果有人需要更多语境化,请询问。谢谢 :)

4

0 回答 0