繁体   English   中英

Android Instrumentation测试用例

[英]Android Instrumentation Test Case

我想测试其他apk的活动,并且此测试扩展了ActivityInstrumentationTestCase2( http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html ),因为我需要获取Activity和Instrumentation。

我尝试像这样使用DexClassLoader:

    public MainActivityTest() throws ClassNotFoundException{
    super((new DexClassLoader(
                "/data/app/my-application.apk", "/data/app/my-application",null, MainActivityTest.class.getClassLoader())).loadClass("my-application.MainActivity")))}

但是我得到的结果是一个异常: optimizedDirectory not readable/writable: /data/data/valentin.myapplication2

有解决方案吗?

我需要活动,因为我在之后使用它: activity.getWindow().getDecorView()

仅供参考:

@Before
public void setUp() throws Exception {
    super.setUp();
    injectInstrumentation(InstrumentationRegistry.getInstrumentation());
    mActivity = getActivity();
}

@Test
public void testRecorder(){

   new ActivityListener(InstrumentationRegistry.getInstrumentation(),mActivity,12).start();
    while(true){
    }
}

您绝对不应在代码中对这样的路径进行硬编码。 首先,/ data / app是错误的路径-这是apk本身所在的位置,只有系统可以在其中写入。 您可以使用getFilesDir()获取应用程序数据目录的路径,您可以将其写入。

使用DexClassLoader时,您必须提供可写的路径,因为系统将优化dex文件并将优化的版本写入您指定的位置。

public Class getActivityClass(Context ctx)
        throws PackageManager.NameNotFoundException, ClassNotFoundException {
    ApplicationInfo pi = ctx.getPackageManager()
    .getApplicationInfo("my.application", 0);
    String apkPath = pi.sourceDir;

    DexClassLoader loader = new DexClassLoader(apkPath,
            ctx.getFilesDir().getAbsolutePath(), null,
            this.getClass().getClassLoader());
    return loader.loadClass("my-application.MainActivity");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM