使用 Espresso 测试假设视图状态
Assume view state with Espresso test
JUnit 库有一个像 Assume.assumeTrue(boolean)
这样的 Assume.*
指令,它像断言一样工作,但不会导致测试失败而只是被忽略。
我想在测试的 arrange
部分中针对我的一个视图执行此类检查,例如假设,在开始测试的 act
部分之前选中已创建的复选框。
看看:
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void deselectFilter_AllFiltersSelected_CheckboxAllSelectedUnchecked() {
//arrange
ViewInteraction checkBox = onView(
allOf(withId(R.id.cbCheckAll), isDisplayed()));
//assume that this checkbox is checked
//act
...
//assert
...
}
在 arrange
部分,我收到的不是 View
,而是 ViewInteraction
。
所以我可以像 checkBox.check(matches(isChecked()))
这样的 assertion
但是假设如何执行?
目前我创建的唯一方法就是使用 activity 从测试规则中手动找到假设视图。然后通过 jUnit 假设。
CheckBox checkBox = (CheckBox) mActivityTestRule.getActivity().findViewById(R.id.cbCheckAll);
Assume.assumeTrue(checkBox.isChecked());
如果您知道更好的方法,也许是使用 Espresso,请回答。似乎无法直接从 Espresso 命令访问视图
您可以编写自定义 ViewAssertion
以假设当 Espresso ViewMatcher
失败时不会抛出 Exception
:
public static ViewAssertion assume(final Matcher<? super View> viewMatcher) {
return new ViewAssertion() {
@Override
public void check(final View view, final NoMatchingViewException noViewFoundException) {
try {
ViewAssertions.matches(viewMatcher).check(view, noViewFoundException);
} catch (Throwable e) {
// Assume that there is no exception
Assume.assumeNoException(e);
}
}
};
}
然后您可以使用该断言来假设:
onView(withId(R.id.cbCheckAll)).check(assume(isChecked()));
JUnit 库有一个像 Assume.assumeTrue(boolean)
这样的 Assume.*
指令,它像断言一样工作,但不会导致测试失败而只是被忽略。
我想在测试的 arrange
部分中针对我的一个视图执行此类检查,例如假设,在开始测试的 act
部分之前选中已创建的复选框。
看看:
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void deselectFilter_AllFiltersSelected_CheckboxAllSelectedUnchecked() {
//arrange
ViewInteraction checkBox = onView(
allOf(withId(R.id.cbCheckAll), isDisplayed()));
//assume that this checkbox is checked
//act
...
//assert
...
}
在 arrange
部分,我收到的不是 View
,而是 ViewInteraction
。
所以我可以像 checkBox.check(matches(isChecked()))
这样的 assertion
但是假设如何执行?
目前我创建的唯一方法就是使用 activity 从测试规则中手动找到假设视图。然后通过 jUnit 假设。
CheckBox checkBox = (CheckBox) mActivityTestRule.getActivity().findViewById(R.id.cbCheckAll);
Assume.assumeTrue(checkBox.isChecked());
如果您知道更好的方法,也许是使用 Espresso,请回答。似乎无法直接从 Espresso 命令访问视图
您可以编写自定义 ViewAssertion
以假设当 Espresso ViewMatcher
失败时不会抛出 Exception
:
public static ViewAssertion assume(final Matcher<? super View> viewMatcher) {
return new ViewAssertion() {
@Override
public void check(final View view, final NoMatchingViewException noViewFoundException) {
try {
ViewAssertions.matches(viewMatcher).check(view, noViewFoundException);
} catch (Throwable e) {
// Assume that there is no exception
Assume.assumeNoException(e);
}
}
};
}
然后您可以使用该断言来假设:
onView(withId(R.id.cbCheckAll)).check(assume(isChecked()));