【发布时间】:2016-09-25 14:59:15
【问题描述】:
我不熟悉使用浓缩咖啡。使用此代码我无法真正得到我想要测试的内容:
onData(withId(R.id.relativelayout_tag))
.inAdapterView(withId(R.id.recyclerview_tag_list))
.onChildView(withId(R.id.imageview_tag))
.atPosition(1)
.check(matches(isDisplayed()));
其中R.id.imageview_tag 是R.id.relativelayout_tag 的子代。 R.id.relativelayout_tag 包含我的适配器项目的全部内容。 R.id.recyclerview_tag_list 是我的 RecyclerView 的名称,我在其上分配了一个特定的 RecyclerView Adapter。
这是一个非常非常基础的测试。以下是用户程序:
- 选择,SPECIFICALLY,
RecyclerView上的第一项(我真的不在乎 文本在视图上)。也不建议使用视图文本来识别第一项。 我不关心适配器项目的内容,甚至在某些视图上放置一个独特的标签。 - 在选择时,指示器视图(显示项目的 ImageView 被选中)应该会出现。
非常基本和简单。使用 Espresso 为这个基本的用户故事编写测试非常困难。当我运行该特定测试时,它总是失败,说明:
Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints:
(is assignable from class: class android.widget.AdapterView and is displayed on the screen to the user)
Target view: "RecyclerView{id=2131624115, res-name=recyclerview_tag_list, visibility=VISIBLE, width=480, height=1032, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=15}"
这没有意义,因为我的列表已经可见。我什至可以很好地运行这个测试:
onView(withId(R.id.recyclerview_tag_list))
.perform(RecyclerViewActions
.actionOnItemAtPosition(1, click()));
这是完整的测试:
@Test
public void shouldTagToggleSelected()
{
onView(withId(R.id.recyclerview_tag_list))
.perform(RecyclerViewActions
.actionOnItemAtPosition(1, click()));
onData(withId(R.id.relativelayout_tag))
.inAdapterView(withId(R.id.recyclerview_tag_list))
.onChildView(withId(R.id.imageview_tag))
.atPosition(1)
.check(matches(isDisplayed()));
//onView(withId(R.id.imageview_tag))
// .check(matches(isDisplayed()));
}
如果指示器视图的可见性设置为visible仅在该特定项目上(或我选择的任何项目),我想测试什么。
有什么想法吗?也许我错过了一些东西。
非常感谢!
【问题讨论】:
标签: android unit-testing android-espresso