JUnit库有一个Assume.*
指令,如Assume.assumeTrue(boolean)
,它的作用类似于断言,但不会导致测试失败而只是被忽略。
我想在我的一个视图的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
。
所以我可以执行assertion
之类的checkBox.check(matches(isChecked()))
但是如何表现呢?
答案 0 :(得分:2)
您可以编写自定义ViewAssertion
,假设Espresso Exception
失败时不会引发ViewMatcher
:
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()));
答案 1 :(得分:0)
我此时创立的唯一方法就是通过测试规则的活动手动查看假设视图。然后通过jUnit假设。
CheckBox checkBox = (CheckBox) mActivityTestRule.getActivity().findViewById(R.id.cbCheckAll);
Assume.assumeTrue(checkBox.isChecked());
如果你知道更好的方法,也许使用Espresso,请回答。似乎无法直接从Espresso命令访问视图