2

I am developing an Android app. I am writing the Junit test for the android and I am a novice in the Junit test case.

In-app I have one relative layout on click of that I am opening date picker dialog box and once the user selects the date I am showing in the TextView.

I want to test these actions with Junit. When I try to run the test case it is throwing me following error:

java.lang.RuntimeException: Can't create handler inside thread Thread[Instr: androidx.test.runner.AndroidJUnitRunner,5,main] that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:205)
at android.os.Handler.<init>(Handler.java:118)
at android.app.Dialog.<init>(Dialog.java:123)
at android.app.AlertDialog.<init>(AlertDialog.java:201)
at android.app.AlertDialog.<init>(AlertDialog.java:197)
at android.app.DatePickerDialog.<init>(DatePickerDialog.java:115)
at android.app.DatePickerDialog.<init>(DatePickerDialog.java:90)
at com.example.sride.DataSelectedTest.loginClickedSuccess(DataSelectedTest.java:74)

Here is my Test class:

@RunWith(AndroidJUnit4ClassRunner.class)
public class DataSelectedTest {

    private Context appContext;

    @Test
    public void useAppContext() {
        // Context of the app under test.
        appContext = ApplicationProvider.getApplicationContext();
        assertEquals("com.example.sride", appContext.getPackageName());
    }

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void datCheckSuccess() throws Throwable {
        Log.e("@Test", "Performing date check success test");
        Espresso.onView((withId(R.id.calendarRl)))
                .perform(ViewActions.click());

        // throwing error at this line
        // If I remove this line then it is working as expected
        DatePickerDialog datePickerDialog =
                new DatePickerDialog(mActivityRule.getActivity(), null, 2012, 6, 7);

        datePickerDialog.dismiss();

        Espresso.onView(withId(R.id.dateTv))
                .check(matches(withText("7" + "-" + (6 + 1) + "-" + "2012")));
    }
}

I also tried these codes to run inside runOnUiTHeard() but the problem still persists.

I also tried these codes to run inside Handler() but the test will keep on running not showing any output

Am I missing something?

2
  • The answer is old, but might be helpful. Commented Dec 21, 2019 at 22:04
  • @Onik I tried this but it is going infinite Commented Dec 22, 2019 at 6:04

1 Answer 1

0

Here is a link which may solve your problem. To work on real instance of your activity, you would need either an instrumentation test or you may need to use Roboelectric.

Instrumented Unit Class Test - Can't create handler inside thread that has not called Looper.prepare()

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.