android-NoClassDefFoundError实现IdlingResource

android-NoClassDefFoundError实现IdlingResource,第1张

概述我需要告诉Espresso等待我的活动​​空闲.我正在使用IdlingResource接口来实现此目的.这是我用于测试的代码:publicclassMyActivityextendsActivityimplementsIdlingResource{privatebooleanisIdle;ResourceCallbackresourceCallback;

我需要告诉Espresso等待我的活动​​空闲.我正在使用IDlingResource接口来实现此目的.这是我用于测试的代码:

    public class MyActivity extends Activity implements IDlingResource {        private boolean isIDle;        ResourceCallback resourceCallback;        @OverrIDe        protected voID onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentVIEw(R.layout.activity_my);            final button mybutton = (button) findVIEwByID(R.ID.mybutton);            final Progressbar progressbar = (Progressbar) findVIEwByID(R.ID.progressbar);            new Handler().postDelayed(new Runnable() {                @OverrIDe                public voID run() {                    mybutton.setVisibility(VIEw.VISIBLE);                    progressbar.setVisibility(VIEw.GONE);                    isIDle = true;                }            }, 3000);        }        public voID buttonClicked(VIEw vIEw) {            Toast.makeText(MyActivity.this, "OK", Toast.LENGTH_SHORT).show();        }        @OverrIDe        public String getname() {            return getClass().getname();        }        @OverrIDe        public boolean isIDleNow() {            if(isIDle){                resourceCallback.on@R_502_3721@ToIDle();                return true;            }            return false;        }        @OverrIDe        public voID registerIDle@R_502_3721@Callback(ResourceCallback resourceCallback) {            this.resourceCallback = resourceCallback;        }    }

Espresso自动等待AsyncTask完成,因此,如果我使用AnsycTask,我什至不需要实现此接口.问题是我正在使用库与网络进行通信,并且似乎不使用AnsyncTasks或Espresso不知道这一点.

我的问题是,如果我在模拟器(Genymotion)或任何其他设备上运行相同的测试,则以上代码仅在我的设备(Motorola XT1058或Moto X)上可以正常工作,但最终出现以下异常:

junit.framework.AssertionFailedError: Exception in constructor: testA (java.lang.NoClassDefFoundError: rapnaveia.com.br.myapplication.MyActivityat rapnaveia.com.br.myapplication.ApplicationTest.<init>(ApplicationTest.java:16)at java.lang.reflect.Constructor.constructNative(Native Method)at java.lang.reflect.Constructor.newInstance(Constructor.java:417)at junit.runner.BaseTestRunner.getTest(BaseTestRunner.java:118)at androID.test.AndroIDTestRunner.getTest(AndroIDTestRunner.java:149)at androID.test.AndroIDTestRunner.setTestClassname(AndroIDTestRunner.java:57)at androID.test.suitebuilder.TestSuiteBuilder.addTestClassByname(TestSuiteBuilder.java:80)at androID.test.InstrumentationTestRunner.parseTestClass(InstrumentationTestRunner.java:443)at androID.test.InstrumentationTestRunner.parseTestClasses(InstrumentationTestRunner.java:424)at androID.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:370)at com.Google.androID.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onCreate(GoogleInstrumentationTestRunner.java:114)at androID.app.ActivityThread.handleBindApplication(ActivityThread.java:4435)at androID.app.ActivityThread.access00(ActivityThread.java:141)at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)at androID.os.Handler.dispatchMessage(Handler.java:99)at androID.os.Looper.loop(Looper.java:137)at androID.app.ActivityThread.main(ActivityThread.java:5103)at java.lang.reflect.Method.invokeNative(Native Method)at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:553)at dalvik.system.NativeStart.main(Native Method))at androID.test.AndroIDTestRunner.runTest(AndroIDTestRunner.java:191)at androID.test.AndroIDTestRunner.runTest(AndroIDTestRunner.java:176)at androID.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)at com.Google.androID.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onStart(GoogleInstrumentationTestRunner.java:167)at androID.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

这里是我的测试类的代码:

public class ApplicationTest extends ActivityInstrumentationTestCase2<MyActivity> {    public Applicationtest() {        super(MyActivity.class);    }    public voID testA(){        Espresso.registerIDlingResources(getActivity());        Espresso.onVIEw(withID(R.ID.mybutton)).perform(click());    }}

build.gradle

apply plugin: 'com.androID.application'androID {    compileSdkVersion 20    buildToolsversion "20.0.0"    defaultConfig {        applicationID "rapnaveia.com.br.myapplication"        minSdkVersion 15        targetSdkVersion 20        versionCode 1        versionname "1.0"        testApplicationID 'br.com.rapnaveia'        testInstrumentationRunner 'com.Google.androID.apps.common.testing.testrunner.GoogleInstrumentationTestRunner'    }    buildTypes {        release {            runProguard false            proguardfiles getDefaultProguardfile('proguard-androID.txt'), 'proguard-rules.pro'        }    }}dependencIEs {    compile filetree(dir: 'libs', include: ['*.jar'])    androIDTestCompile files('libs/espresso-1.1-bundled.jar')}

解决方法:

问题出在gradle配置中.您的项目正在尝试编译espresso jar两次.

dependencIEs {    compile filetree(dir: 'libs', include: ['*.jar'])    androIDTestCompile files('libs/espresso-1.1-bundled.jar')}

通过这种配置,espresso jar由您的主项目和测试项目进行编译.因此,当您尝试执行测试时,主项目无法正确构建,从而导致错误(而且我认为您可以在设备中运行测试很奇怪).

要运行测试,您所需要做的就是从测试目标的依赖项中删除编译指令.

dependencIEs {    compile filetree(dir: 'libs', include: ['*.jar'])}

androID测试项目将使用在主项目中编译的espresso jar,因为该主项目已“编译”到测试项目中.

总结

以上是内存溢出为你收集整理的android-NoClassDefFoundError实现IdlingResource全部内容,希望文章能够帮你解决android-NoClassDefFoundError实现IdlingResource所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1077917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存