Я прочитал следующие SO сообщения, но мои вопросы совершенно другие.
- Тестирование уведомлений в Android
Мы используем пользовательские макеты Androidпостроить наши уведомления. Вот как выглядят наши уведомления Android, когда они отображаются.
Я хочу написать для него эспрессо-тест. Поскольку они представляют собой макеты уведомлений, они отображаются в отдельном процессе и не связаны с действием и представлением содержимого.
Итак, я подумал над тем, чтобы надувать макеты в тесте эспрессо и посмотреть, не пересекаются ли два текстовых представления с представлением изображения. Если проверка пройдена, то проверка пройдена. Мой эспрессо-тест приведен ниже
@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>