如何测试Android中的操作栏溢出项?

时间:2015-07-13 13:35:40

标签: java android unit-testing

我是Java的新手,我为应用程序编写了一个注销功能。我已经在测试中工作了好几个小时,但无法弄明白。 这是错误:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.app.Activity.<init>(Activity.java:803)
at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java:76)
at android.support.v7.app.AppCompatActivity.<init>(AppCompatActivity.java:50)
at cc.softwarefactory.lokki.android.activities.MainActivity.<init>(MainActivity.java:54)
at cc.softwarefactory.lokki.android.espresso.MenuTest.testIfLogoutButtonWork(MenuTest.java:83)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
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 junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:115)
at junit.framework.TestResult.runProtected(TestResult.java:133)
at android.support.test.internal.runner.junit3.DelegatingTestResult.runProtected(DelegatingTestResult.java:90)
at junit.framework.TestResult.run(TestResult.java:118)
at android.support.test.internal.runner.junit3.AndroidTestResult.run(AndroidTestResult.java:49)
at junit.framework.TestCase.run(TestCase.java:124)
at android.support.test.internal.runner.junit3.NonLeakyTestSuite$NonLeakyTest.run(NonLeakyTestSuite.java:63)
at junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
at android.support.test.internal.runner.junit3.DelegatingTestSuite.run(DelegatingTestSuite.java:103)
at android.support.test.internal.runner.junit3.AndroidTestSuite.run(AndroidTestSuite.java:63)
at android.support.test.internal.runner.junit3.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at org.junit.runner.JUnitCore.run(JUnitCore.java:136)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:270)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1928)

这是我的代码:

MenuTest.java

public void testIfLogoutButtonWork() {

    getActivity();

    MainActivity myActivity = new MainActivity();
    //click the menu option

    getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
    getInstrumentation().invokeMenuActionSync(myActivity, R.id.action_logout, 0);


    //if the logout() was executed successfully, it will return true.
    assertEquals(true, TestUtils.getLogoutValue());

}

MainActivity.java

public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        switch (id) {
            ...............
            case R.id.action_logout:
                logout();
                break;

        }
        return super.onOptionsItemSelected(item);
    }
    logout(){
    .........
    }

我使用ActivityInstrumentationTestCase2进行测试。请帮我 !提前谢谢。

0 个答案:

没有答案