Issue
JUnit library has an Assume.* instructions like Assume.assumeTrue(boolean) which works like assertions, but not cause test to fail and just to been ignored.
I want to perform such checking in arrange part of test for one of my views, by example assume, that founded checkbox is checked before starting the act part of test.
Take a look:
@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
...
}
In the arrange part i've received not a View, but ViewInteraction.
So I can perform such assertion like checkBox.check(matches(isChecked()))
But how to perform assume?
Solution
You could write a custom ViewAssertion to assume that no Exception is thrown when Espresso ViewMatcher fails:
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);
}
}
};
}
Then you can use that assertion to assume like:
onView(withId(R.id.cbCheckAll)).check(assume(isChecked()));
Answered By - thaussma
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.