繁体   English   中英

是否可以在 Android Studio 上对 MaterialSearchBar 进行单元测试?

[英]Is there the ability to unit test a MaterialSearchBar on Android Studio?

我一直在对我的代码进行单元测试,并且一直在努力寻找一种方法来从implementation 'com.github.mancj:MaterialSearchBar:+' Android Studio 上对 MaterialSearchBar 进行单元测试。

我试图通过键入来对其进行单元测试

@Test
public void searchForTony() {
    onView(withId(R.id.search_bar)).perform(click()).perform(typeText("Tony"));
}

但这似乎不起作用,这类似于我对 EditText 字段进行单元测试的方式,我可以请我就如何处理这个问题提供一些指导吗?

谢谢

MaterialSearchBarViewGroup而不是EditText ,因此您将无法直接使用perform(typeText("Tony")) 但是您知道它只包含一个EditText

您可以通过在EditText上使用另一个ViewMatcher来找到EditText

@Test
public void findEditTextByClassName(){

    onView(withClassName(containsString(EditText.class.getSimpleName()))).perform(replaceText("Tony"));
    onView(withText("Tony")).check(matches(isDisplayed()));
}

或者,您可以搜索View树,从MaterialSearchBar作为根目录开始,因为您知道它在布局中出现在哪个 id 下:

@Test
public void findEditTextInViewTree(){
    // NOTE exchange R.id.material_search_bar for your own id value! 
    ViewGroup viewGroup = activityRule.getActivity().findViewById(R.id.material_search_bar);
    int id = -1;
    for(int i = 0; i < viewGroup.getChildCount(); i++){
        View view = viewGroup.getChildAt(i);
        if(view instanceof EditText){
            id = view.getId();
        }
    }
    onView(allOf(withParent(withId(R.id.material_search_bar)),withId(id))).perform(replaceText("Tony"));
    onView(withText("Tony")).check(matches(isDisplayed()));
}

请注意,我使用的是replaceText()而不是typeText()因为这篇文章是关于查找View ,而不是等待typeText()完成

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM