我正在编写一个Android单元测试,试图根据操作来测试是否启用了MenuItem。我可能不完全了解Espresso Matchers的工作原理,但这是我最初开始编写的内容。
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();
。现在可以工作。