Android - AssertionFailedError on startActivity method in ActivityUnitTestCase test class
Asked Answered
T

1

20

I am trying to test an activity in a module. I am just trying to start this activity in the test method, but I always have a AssertionFailedError. I searched the web for this issue but could not find any solution. Any help is appreciated.

This is my test class:

public class ContactActivityTest extends ActivityUnitTestCase<ContactActivity> {

    public ContactActivityTest() {
        super(ContactActivity.class);
    }


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


    public void testWebViewHasNotSetBuiltInZoomControls() throws Exception {
        Intent intent = new Intent(getInstrumentation().getTargetContext(),
                ContactActivity.class);
        startActivity(intent, null, null);
    }


    @Override
    public void tearDown() throws Exception {
        super.tearDown();
    }
}

And this is the error:

junit.framework.AssertionFailedError
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:147)
at com.modilisim.android.contact.ContactActivityTest.testWebViewHasNotSetBuiltInZoomControls(ContactActivityTest.java:29)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1763)

Regards.

Tosspot answered 4/7, 2014 at 14:57 Comment(10)
Have you tried with an empty activity or could it be that ContactActivity code is responsible for the error?Rumilly
@Rumilly it might well be, the problem is which part of the code. I tried with an extension of either FragmentActivity and Activity, and I emptied the latter's code and it still crashed with the same issue.Faerie
I believe you need to have the startActivity(...) code in setUp() Can you check this, and if so I'll add an answer for you to accept.Junkie
@MGranja That's the JUnit 3 that deals with calling the test methodFaerie
@DougEdey According to the javadoc it should NOT be called in setUp() (because of a ClassLoader issue), but I tried anyway to call in eithersetUp or test method, with the same issue.Faerie
@Xcihnegn that's the line: startActivity(intent, null, null);Faerie
actually I saw one sample test codes that calls startActivity from setup , so could just put in setup without put in test methodVilberg
Is the Activity defined in the manifest file? I tracked down the exception, and it ends up here: grepcode.com/file/repository.grepcode.com/java/ext/… (ActivityNotFoundException)Lietuva
try to update java veraion from 1.6 or upgrade ane run again. May be it work. If upgrade then try to down grade try both.Euplastic
@Faerie are you seeing this exact error?Downcast
T
12

ActivityUnitTestCase's startActivity() method needs to be called on the main thread only.

This can be done in the following ways:

  1. Use the @UiThreadTest annotation before your test method:

    @UiThreadTest
    public void testWebViewHasNotSetBuiltInZoomControls() throws Exception {
        Intent intent = new Intent(getInstrumentation().getTargetContext(),
                ContactActivity.class);
        startActivity(intent, null, null);
    }
    
  2. Use the runOnMainSync method of the Instrumentation class:

    public void testWebViewHasNotSetBuiltInZoomControls() throws Exception {
        final Intent intent = new Intent(getInstrumentation().getTargetContext(),
                ContactActivity.class);
    
        getInstrumentation().runOnMainSync(new Runnable() {
            @Override
            public void run() {
                startActivity(intent, null, null);
               }
            });
     }
    

Why am I right?

Talapoin answered 20/4, 2015 at 12:27 Comment(3)
I'm sorry that I could not verify the answer to give you my initial bounty. But the annotation solved the issue, so here it is repaired, you deserved this bounty. Thanks!Faerie
This answer solves the issue, it would be great if the OP of question accepts this as answer.Humidistat
You might want to extend ActivityInstrumentationTestCase2 instead.Stopgap

© 2022 - 2024 — McMap. All rights reserved.