Как использовать UnitTest и EspressoTest с Retrofit? - PullRequest
0 голосов
/ 11 октября 2018

В моем приложении я использую Retrofit для получения данных с сервера и использую Комната для сохранения в базу данных.
Я хочу, когда нажмите на кнопку наRecyclerView adapter, сохраните этот предмет в базе данных.

Я могу это сделать, и когда я нажимаю на кнопку, я могу сохранить это в Комнату базу данных.

Но я хочу написать тест для этого, но я не знаю, как я могу запустить тест после загрузки данных с сервера !

Я пишу тест для сохранения статических данных в базе данных:

@LargeTest
@RunWith(AndroidJUnit4.class)
public class AddPersonTest {

    @Rule
    public ActivityTestRule<ListActivity> mActivityTestRule = new ActivityTestRule<>(ListActivity.class);

    @Test
    public void addPersonTest() {
        ViewInteraction floatingActionButton = onView(allOf(withId(R.id.fab), isDisplayed()));
        floatingActionButton.perform(click());

        ViewInteraction appCompatEditText = onView(
                withId(R.id.nameEditText));
        appCompatEditText.perform(scrollTo(), replaceText("Daniel Alvarez"), closeSoftKeyboard());

        ViewInteraction appCompatEditText2 = onView(
                withId(R.id.addressEditText));
        appCompatEditText2.perform(scrollTo(), replaceText("La Paz, Bolivia"), closeSoftKeyboard());

        ViewInteraction appCompatEditText3 = onView(
                withId(R.id.phoneEditText));
        appCompatEditText3.perform(scrollTo(), replaceText("591 77242424"), closeSoftKeyboard());

        ViewInteraction appCompatEditText4 = onView(
                withId(R.id.emailEditText));
        appCompatEditText4.perform(scrollTo(), replaceText("daniel@alvarez.tech"), closeSoftKeyboard());

        ViewInteraction appCompatEditText5 = onView(
                withId(R.id.birthdayEditText));
        appCompatEditText5.perform(scrollTo(), click());

        ViewInteraction appCompatImageButton = onView(
                allOf(withClassName(is("android.support.v7.widget.AppCompatImageButton")), withContentDescription("Previous month"),
                        withParent(allOf(withClassName(is("android.widget.DayPickerView")),
                                withParent(withClassName(is("com.android.internal.widget.DialogViewAnimator"))))),
                        isDisplayed()));
        appCompatImageButton.perform(click());

        ViewInteraction appCompatImageButton2 = onView(
                allOf(withClassName(is("android.support.v7.widget.AppCompatImageButton")), withContentDescription("Previous month"),
                        withParent(allOf(withClassName(is("android.widget.DayPickerView")),
                                withParent(withClassName(is("com.android.internal.widget.DialogViewAnimator"))))),
                        isDisplayed()));
        appCompatImageButton2.perform(click());

        ViewInteraction appCompatImageButton3 = onView(
                allOf(withClassName(is("android.support.v7.widget.AppCompatImageButton")), withContentDescription("Previous month"),
                        withParent(allOf(withClassName(is("android.widget.DayPickerView")),
                                withParent(withClassName(is("com.android.internal.widget.DialogViewAnimator"))))),
                        isDisplayed()));
        appCompatImageButton3.perform(click());

        ViewInteraction appCompatImageButton4 = onView(
                allOf(withClassName(is("android.support.v7.widget.AppCompatImageButton")), withContentDescription("Previous month"),
                        withParent(allOf(withClassName(is("android.widget.DayPickerView")),
                                withParent(withClassName(is("com.android.internal.widget.DialogViewAnimator"))))),
                        isDisplayed()));
        appCompatImageButton4.perform(click());

        ViewInteraction appCompatButton = onView(
                allOf(withId(android.R.id.button1), withText("OK")));
        appCompatButton.perform(scrollTo(), click());

        ViewInteraction floatingActionButton2 = onView(allOf(withId(R.id.fab), isDisplayed()));
        floatingActionButton2.perform(click());

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        onView(withId(R.id.list)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));

        onView(withId(R.id.nameEditText)).check(matches(withText("Daniel Alvarez")));
        onView(withId(R.id.addressEditText)).check(matches(withText("La Paz, Bolivia")));
        onView(withId(R.id.phoneEditText)).check(matches(withText("591 77242424")));
        onView(withId(R.id.emailEditText)).check(matches(withText("daniel@alvarez.tech")));
    }

    private static Matcher<View> childAtPosition(
            final Matcher<View> parentMatcher, final int position) {

        return new TypeSafeMatcher<View>() {
            @Override
            public void describeTo(Description description) {
                description.appendText("Child at position " + position + " in parent ");
                parentMatcher.describeTo(description);
            }

            @Override
            public boolean matchesSafely(View view) {
                ViewParent parent = view.getParent();
                return parent instanceof ViewGroup && parentMatcher.matches(parent)
                        && view.equals(((ViewGroup) parent).getChildAt(position));
            }
        };
    }
}

При запуске этого теста добавить данные в базу данных, но я хочу после загрузки данных с сервера нажать на кнопку адаптера и получить данные из модели адаптера при сохранении в базу данных!

Как мне написать этот тест?

Можете ли вы выслать мне ссылку на Github для этой проблемы?Я искал в Google, но не нашел

Внимание: Пожалуйста, не дайте мне отрицательные моменты, мне действительно нужна эта помощь.

...