Espresso Android测试-在助手方法中使用getActivity(无法找到要导入的方法)
我正在用浓缩咖啡测试Android应用程序。我试图在一个helper类中编写一个helper函数,该类可以使用以下代码检查微调器的值:Espresso Android测试-在助手方法中使用getActivity(无法找到要导入的方法),android,android-espresso,Android,Android Espresso,我正在用浓缩咖啡测试Android应用程序。我试图在一个helper类中编写一个helper函数,该类可以使用以下代码检查微调器的值: public static void assertSpinner(MainActivity activity, int id, int val) { Spinner s = (Spinner) activity.findViewById(id); assertNotNull(s); assertEquals(val, s.getSelec
public static void assertSpinner(MainActivity activity, int id, int val) {
Spinner s = (Spinner) activity.findViewById(id);
assertNotNull(s);
assertEquals(val, s.getSelectedItemPosition());
}
然后,我可以通过以下方式从测试中调用帮助器:
assertSpinner(getActivity(),R.id.someSpinner,12);
虽然每个assertSpinner的第一个参数都是getActivity()似乎很奇怪。我想改为在helper函数中调用getActivity(),这样就不需要传递它,但这似乎只是因为测试扩展了ActivityInstrumentationTestCase2才可用。是否有任何方法可以获得此值而不必将其传递给我的每个助手,或者这不符合Android方式?不,我认为没有一种干净/简单的方法可以从测试之外获取当前活动 但是,您可以使用自定义视图匹配器干净地执行此操作。差不多
static Matcher<View> withSelectedItemPosition(final int selectedItemPosition) {
return new BoundedMatcher<View, Spinner>(Spinner.class) {
@Override protected boolean matchesSafely(Spinner spinner) {
return spinner.getSelectedItemPosition() == selectedItemPosition;
}
@Override public void describeTo(Description description) {
description.appendText("with selected item position: ")
.appendValue(selectedItemPosition);
}
};
}
这是一个额外的代码,但更惯用。Espresso确实不鼓励您直接与视图层次进行交互;理想情况下,您的测试不应该调用像
findViewById
这样的方法,看起来它对int位置有效,但我尝试使用spinner.getSelectedItem().toString()重写它以匹配字符串,但它似乎不起作用,它告诉我它需要字符串,但它得到了spinner?嗯,这应该可以正常工作。你能公布准确的错误吗?确认。我的代码很差。固定的。感谢并选择您的答案。:)
onView(withId(R.id.my_spinner)).check(matches(withSelectedItemPosition(5)));