java.lang.NoSuchMethodError:没有接口方法onTransitionToIdle()V
请告诉我,我是Android测试新手,我正在尝试修复初始导航视图测试,但我得到了错误。我只是想打开抽屉,点击菜单进入一个新的活动java.lang.NoSuchMethodError:没有接口方法onTransitionToIdle()V,java,android,unit-testing,android-testing,Java,Android,Unit Testing,Android Testing,请告诉我,我是Android测试新手,我正在尝试修复初始导航视图测试,但我得到了错误。我只是想打开抽屉,点击菜单进入一个新的活动 java.lang.NoSuchMethodError: No interface method onTransitionToIdle()V in class Landroid/support/test/espresso/IdlingResource$ResourceCallback; or its super classes (declaration of 'and
java.lang.NoSuchMethodError: No interface method onTransitionToIdle()V in class Landroid/support/test/espresso/IdlingResource$ResourceCallback; or its super classes (declaration of 'android.support.test.espresso.IdlingResource$ResourceCallback' appears in /data/app/com.bellman.inecparrot.mock-2/base.apk)
at android.support.test.espresso.contrib.DrawerActions$IdlingDrawerListener.onDrawerStateChanged(DrawerActions.java:266)
at android.support.v4.widget.DrawerLayout.updateDrawerState(DrawerLayout.java:834)
at android.support.v4.widget.DrawerLayout$ViewDragCallback.onViewDragStateChanged(DrawerLayout.java:2089)
at android.support.v4.widget.ViewDragHelper.setDragState(ViewDragHelper.java:881)
at android.support.v4.widget.ViewDragHelper$2.run(ViewDragHelper.java:338)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:470)
at android.support.test.espresso.base.UiControllerImpl.loopMainThreadUntilIdle(UiControllerImpl.java:365)
at android.support.test.espresso.contrib.DrawerActions$DrawerAction.perform(DrawerActions.java:79)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5389)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
下面是我正在运行的测试:
@RunWith(AndroidJUnit4.class)
@LargeTest
public class AppNavigationTests {
/**
* {@link ActivityTestRule} is a JUint {@link Rule @Rule} to launch your activity under test
* <p>
* <p>
* Rules are interceptios which are executed for each test method and are important building
* block for JUnit tests.
*/
@Rule
public ActivityTestRule<HomeActivity> mActivityTestRule =
new ActivityTestRule<>(HomeActivity.class);
private IdlingResource mIdlingResource;
@Test
public void clickOnAndroidHomeIcon_OpensNavigation() {
//check the left drawer is closed at startUp
onView(withId(R.id.drawerlayout))
.check(matches(isClosed(Gravity.LEFT))); //left Drawer should be closed
//open Drawer
onView(withContentDescription(TestUtils.getToolbarNavigationContentDescription(
mActivityTestRule.getActivity(), R.id.toolbar
)))
.perform(click());
//Check if drawer is open by now
onView(withId(R.id.drawerlayout))
.check(matches(isOpen(Gravity.LEFT)));
//close the drawer
onView(withContentDescription(TestUtils.getToolbarNavigationContentDescription(
mActivityTestRule.getActivity(), R.id.toolbar
))).perform(click());
}
@Test
public void clickGovNavigationItem_ShowsGovActivity() {
//open drawer
onView(withId(R.id.drawerlayout))
.check(matches(isClosed(Gravity.LEFT))) //left drawer should be closed
.perform(open());
//start the gov Screen
onView(withId(R.id.navigation_view))
.perform(navigateTo(R.id.action_gov));
//check that the Gov Activity was opened
onView(withId(R.id.gov_frag_frame))
.check(matches(isDisplayed()));
}
}
@RunWith(AndroidJUnit4.class)
@最大的
公共类AppNavigationTests{
/**
*{@link ActivityTestRule}是一个JUint{@link Rule@Rule},用于启动测试中的活动
*
*
*规则是针对每种测试方法执行的拦截,是重要的构建
*用于JUnit测试的块。
*/
@统治
公共活动测试规则MacTivityStrule=
新的ActivityTestRule(HomeActivity.class);
私有资源;
@试验
公共无效单击并删除主页图标\u OpensNavigation(){
//检查左抽屉在启动时是否关闭
onView(带id(R.id.抽屉布局))
.check(匹配项(isClosed(Gravity.LEFT));//应关闭左侧抽屉
//抽屉
onView(带ContentDescription(TestUtils.getToolbarNavigationContentDescription(
mActivityTestRule.getActivity(),R.id.toolbar
)))
。执行(单击());
//检查抽屉现在是否打开了
onView(带id(R.id.抽屉布局))
.检查(匹配项(等参线(重力左));
//关上抽屉
onView(带ContentDescription(TestUtils.getToolbarNavigationContentDescription(
mActivityTestRule.getActivity(),R.id.toolbar
)))。执行(单击());
}
@试验
公共作废clickGovNavigationItem_显示活动(){
//抽屉
onView(带id(R.id.抽屉布局))
.check(匹配项(isClosed(Gravity.LEFT))//应关闭左侧抽屉
.perform(open());
//启动gov屏幕
onView(带id(R.id.navigation\U视图))
.执行(导航到(R.id.action_-gov));
//检查Gov活动是否已打开
onView(带id(R.id.gov\u frag\u frame))
.检查(匹配项(isDisplayed());
}
}
听起来ProGuard正在删除所需的一个接口。我认为您需要在Proguard配置中添加一行,如下所示:
-保留公共接口android.support.test.espresso.IdlingResource$ResourceCallback{*;}
我目前没有办法测试它,因此如果这不太正确,您需要调整它,这里有一个链接指向Proguard手册中的“保留”选项: