Я пишу Android Unit Test, где пытаюсь проверить, включен ли MenuItem в зависимости от действия. Возможно, я не совсем понимаю, как работают эспрессо-мэтчеры, но это то, что я изначально начал писать.
menu.xml
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_item"
android:title="@string/menu_item"
android:enabled="false"
app:showAsAction="always"/>
</menu>
и мой юнит-тест фрагмента, который имеет меню с одним элементом меню
ExampleFragmentTest.java
public class ExampleFragmentTest {
private ActivityForUnitTesting activityForUnitTesting;
private FragmentManager fragmentManager;
private ExampleFragment exampleFragment;
@Rule
public ActivityTestRule activityTestRule = new ActivityTestRule<>(ActivityForUnitTesting.class);
@Before
public void setUp() {
activityForUnitTesting = (ActivityForUnitTesting) activityTestRule.getActivity();
fragmentManager = activityForUnitTesting.getSupportFragmentManager();
exampleFragment = new ExampleFragment();
}
@Test
public void test_MenuItem() {
// Both of the following tests pass
onView(withId(R.id.menu_item)).check(matches(isEnabled()));
onView(withId(R.id.menu_item)).check(matches(not(isEnabled())));
}
}
Моя проблема в том, что test_MenuItem()
проходит, когда я считаю, что это не следует, потому что, по моему мнению, одна проверка проверяет, включена ли menu_item
, а другая - нет. Либо я не понимаю, как работают Matchers, либо что-то не так с моим тестом, который я не вижу.
РЕДАКТИРОВАТЬ (исправлено) :
Необходимо добавить EspressoTestUtils.waitForIdleSync();
до моих проверок. Работает сейчас.