Модульный тест эспрессо проходит как для isEnabled (), так и для (isEnabled ()) Android - PullRequest
0 голосов
/ 25 августа 2018

Я пишу 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(); до моих проверок. Работает сейчас.

...