在Android上使用Espresso测试EditText错误

在Android上使用Espresso测试EditText错误,android,testing,junit4,android-espresso,Android,Testing,Junit4,Android Espresso,我想测试EditText字段是否有错误(使用EditText.setError(“不能为空!”)设置) 我已经用新的AndroidStudio 2.2特性创建了一个浓缩咖啡测试用例,用于记录浓缩咖啡测试。所以代码几乎是自动生成的。但目前它只检查是否显示编辑文本 @RunWith(AndroidJUnit4.class) public class CreateNoteActivityTitleCannotBeBlank { @Rule public ActivityTestRu

我想测试EditText字段是否有错误(使用EditText.setError(“不能为空!”)设置)

我已经用新的AndroidStudio 2.2特性创建了一个浓缩咖啡测试用例,用于记录浓缩咖啡测试。所以代码几乎是自动生成的。但目前它只检查是否显示编辑文本

@RunWith(AndroidJUnit4.class)
public class CreateNoteActivityTitleCannotBeBlank {

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

    @Test
    public void createNoteActivityTitleCannotBeBlank() {
        ViewInteraction floatingActionButton = onView(
                allOf(withId(R.id.fab_add_note),
                        withParent(allOf(withId(R.id.activity_create_note),
                                withParent(withId(android.R.id.content)))),
                        isDisplayed()));
        floatingActionButton.perform(click());

        ViewInteraction editText = onView(
                allOf(withId(R.id.tiet_note_title),
                        childAtPosition(
                                childAtPosition(
                                        withId(R.id.til_title),
                                        0),
                                0),
                        isDisplayed()));
        editText.check(matches(isDisplayed()));

    }

    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));
            }
        };
    }
}
@RunWith(AndroidJUnit4.class)
公共类CreateNoteActivityTitleCannotBeBlank{
@统治
public ActivityTestRule mActivityTestRule=新的ActivityTestRule(CreateNoteActivity.class);
@试验
public void createNoteActivityTitleCannotBeBlank()的{
ViewInteraction floatingActionButton=onView(
allOf(带id(R.id.fab\u add\u note),
withParent(allOf)(withId(R.id.activity\u create\u note),
withParent(withId(android.R.id.content)),
isDisplayed());
floatingActionButton.perform(单击());
ViewInteraction editText=onView(
allOf(带id(R.id.tiet\U注释\U标题),
儿童体位(
儿童体位(
带id(R.id.til_title),
0),
0),
isDisplayed());
检查(匹配项(isDisplayed());
}
专用静态匹配器子定位(
最终匹配器父匹配器,最终整型位置){
返回新的TypeSafeMatcher(){
@凌驾
公共无效说明(说明){
description.appendText(“父项中的子项位置“+位置+”);
parentMatcher.descripbeto(描述);
}
@凌驾
公共布尔匹配安全(视图){
ViewParent=view.getParent();
返回视图组的父实例(&parentMatcher.matches)(父)
&&view.equals(((视图组)parent.getChildAt(位置));
}
};
}
}

有没有办法测试是否显示错误?

您可以更改编辑文本。检查(匹配项(isDisplayed())到编辑文本。检查(匹配项(hasErrorText(“不能为空”))

这对我来说很有效

        onView(withId(R.id.signin_email)).check(matches(hasErrorText("Email not valid")));

尝试添加adnotation@nullable可能重复的Ya就是这样!:)非常感谢。我只检查了,但缺少一些方法;如果我需要传递字符串资源怎么办?