用于测试 TextView 错误消息的自定义匹配器的示例

  1. 使用以下代码在测试包中创建类名 ErrorMatcher
public class ErrorMatcher {

    @NonNull
    public static Matcher<View> withError(final String expectedErrorText) {
        Checks.checkNotNull(expectedErrorText);
        return new BoundedMatcher<View, TextView>(TextView.class) {    
            @Override
            public void describeTo(final Description description) {
                description.appendText("error text: ");
                stringMatcher.describeTo(description);
            }
                
            @Override
            public boolean matchesSafely(final TextView textView) {
                return expectedErrorText.equals(textView.getError().toString());
            }
        };
    }
}

匹配逻辑是找到 TextView 元素,该错误消息文本等于预期的错误文本值,通过布局层次结构中存在的 TextView 字段的子集。describeTo 方法用于调试输出。

  1. 然后,你可以在测试用例中使用自定义匹配器,如下所示:
@Test  
public void verifiesSignInErrorIsShown() {
    onView(withId(R.id.email_sign_in_button)).perform(click());
    onView(ErrorMatcher.withError("Your error text")).check(matches(isDisplayed()));
}