Как проверить уведомления Android в Espress - PullRequest
0 голосов
/ 11 октября 2019

Я прочитал следующие SO сообщения, но мои вопросы совершенно другие.

  1. Тестирование уведомлений в Android

Мы используем пользовательские макеты Androidпостроить наши уведомления. Вот как выглядят наши уведомления Android, когда они отображаются.

Custom Android Notification

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

Итак, я подумал над тем, чтобы надувать макеты в тесте эспрессо и посмотреть, не пересекаются ли два текстовых представления с представлением изображения. Если проверка пройдена, то проверка пройдена. Мой эспрессо-тест приведен ниже

@RunWith(AndroidJUnit4.class)
public class NotificationsTest
{

    // Just to launch an espresso test. It does nothing else.
    @Rule
    public ActivityTestRule<SettingsActivity>
        activityTestRule = new ActivityTestRule<>(MainActivity.class,
        false, false);


    @Test
    public void validateNotifications() throws Exception
    {
    Context context = InstrumentationRegistry.getInstrumentation().getContext();
        View view = LayoutInflater.from(context).inflate(R.layout.notification_layout, null, false);
        TextView body = view.findViewById(R.id.frame_title);
        ImageView imageView = view.findViewById(R.id.image);

        Assert.assertThat(body, Matchers.is(isNotNull()));
        Assert.assertThat(imageView, Matchers.is(isNotNull()));


        Espresso.onView(ViewMatchers.withId(R.id.header)).check(
                PositionAssertions.isCompletelyLeftOf(Matchers.allOf(ViewMatchers.withId(R.id.image), ViewMatchers.isDisplayed())));


    }
}

Когда я запускаю этот тест, тест не проходит в следующей строке

View view = LayoutInflater.from(context).inflate(R.layout.notification_layout, null, false);

со следующей ошибкой. Трассировка стека приведена ниже

E/TestRunner: android.content.res.Resources$NotFoundException: Resource ID #0x7f0d0305
        at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:216)
        at android.content.res.Resources.loadXmlResourceParser(Resources.java:2155)
        at android.content.res.Resources.getLayout(Resources.java:1155)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:421)
        at com.myproject.NotificationsTest.validateNotifications(CarouselVerticalNotificationsTest.java:73)

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

Мой файл макета notification_layout.xml указан ниже

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/notification"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:id="@+id/header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/image"
    android:layout_alignParentTop="true"
    android:importantForAccessibility="no"
    >
    <ImageView
        android:id="@+id/logo_image"
        android:layout_width="8dp"
        android:layout_height="8dp"

        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"

        android:src="@drawable/new_logo"
        android:background="@color/logo_background"
        />

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This item's gone but there's more!!"
        android:layout_alignBottom="@+id/logo_image"
        android:layout_alignTop="@+id/logo_image"

        android:layout_toRightOf="@+id/logo_image"
        android:fontFamily="?android:attr/fontFamily"
        android:textStyle="bold"
        android:gravity="center_vertical"
        android:paddingEnd="8dp"
        android:paddingStart="8dp"
        />

    <TextView
        android:id="@+id/frame_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignStart="@id/title"
        android:text="Vous avez consulté Connecteurs et câbles vidéo, nous vous recommandons ces produits !"
        android:layout_below="@+id/title"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="2dp"
        android:fontFamily="@string/font_family_roboto"
        />
</RelativeLayout>

    <ImageView
        android:id="@+id/image"
        android:layout_width="@dimen/vertical_image_height"
        android:layout_height="@dimen/vertical_image_height"
        android:src="@drawable/stock_image"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:layout_marginEnd="16dp"
        android:layout_marginTop="16dp"

        android:scaleType="centerCrop"
        />
</RelativeLayout>
...