当前位置: 首页 > 知识库问答 >
问题:

Robolectric对加载JNI库的应用程序对象进行处理。我能找个变通办法吗?

蒙胤
2023-03-14

我的Android应用程序的application对象加载了一个JNI库,Robolectric似乎不喜欢这样。当我运行测试时,Robolectric出现了故障,我得到了这个堆栈跟踪:

java.lang.UnsatifiedLinkError:在java.lang.ClassLoader.LoadLibrary(classLoader.java:1758)在java.lang.runtime.LoadLibrary 0(Runtime.java:823)在java.lang.system.LoadLibrary(system.java:1045)在com.cperryinc.application.moolaApplication.(MoolaApplication.Java:24)在java.lang.Class.ForName(class.java:169)在在com.xtremelabs.robolectric.internal.classnameresolver.resolv(classnameresolver.java:15)在com.xtremelabs.robolectric.applicationresolver.newapplicationinstance(applicationresolver.java:71)在com.xtremelabs.robolectric.applicationresolver.resolveApplication(applicationresolver.java:28)在tremelabs.robolectric.robolectricstrunner.internalbeForeTest(Robolectrictestrunner.java:299)在com.xtremelabs.robolectrictrunner.methodBlock(Robolectrictestrunner.java:277)在org.junit.runners.blockJunit4ClassRunner.java:277)在org.junit.runners.blockJunit4ClassRunner.java:79)在runner.java:193)在org.junit.runners.parentrunner$1.在org.junit.runners.parentrunner.runchildren(parentrunner.java:52)在org.junit.runners.parentrunner.runchildren(parentrunner.java:191)在org.junit.runners.parentrunner.html" target="_blank">access$000(parentrunner.java:42)在org.junit.runners.parentrunner.access(com上的WithArgs(JUnit4IdeateStrunner.java:76)com.intellij.rt.execution.junit.junit.jecution.junit.junitstarter.main(junitstarter.java:182)在sun.reflect.nativeMethodAccessorImpl.invoke(nativeMethodAccessorImpl.java:39)在com.intellij.rt.execution.appmain.main(appmain.java:120)在sun.reflect.nativeMethodAccessorImpl.invoke0(本机方法)

我不确定我能做些什么。有什么解决办法吗?

共有1个答案

郭弘盛
2023-03-14
class MyJniClass {
 static {
        try {
            System.loadLibrary("libname");
        } catch (UnsatisfiedLinkError e) {
            // only ignore exception in non-android env
            if ("Dalvik".equals(System.getProperty("java.vm.name"))) throw e;
        }
    }
}

然后在Testrunner中:

public class MyTestRunner  extends RobolectricTestRunner {
   public MyTestRunner(Class testClass) throws InitializationError {
         // remove native calls + replace with shadows
        addClassOrPackageToInstrument("com.example.jni.MyJniClass");
   }

   protected void bindShadowClasses() {
         // bind shadow JNI classes
   }
}
 类似资料:
  • 示例响应处理程序: 我们如何通过模拟处理程序中的对象来对上述处理程序进行单元测试?

  • 调用存储引擎的第1个方法是调用新的处理程序实例。 在存储引擎源文件中定义handlerton之前,必须定义用于函数实例化的函数题头。下面给出了1个来自CSV引擎的示例: static handler* tina_create_handler(TABLE *table); 正如你所见到的那样,函数接受指向处理程序准备管理的表的指针,并返回处理程序对象。 定义了函数题头后,用第21个handlerto

  • 问题内容: 我有多个正在运行的线程,这些线程访问单例对象并调用其方法并在其中传递对象。在该方法中,我仅对接收到的对象进行一些计算。我听说在这种情况下不会有任何问题,因为它是无状态的并且对所有人都是免费的。 我的问题是,它对所有人免费吗?我想知道多个线程如何在自己的线程中调用共享方法而不覆盖其他线程的传递对象吗?请在内存分配方面和堆栈级别进行解释。 问题答案: 我认为您必须区分已经存储在内存和代码执

  • 问题内容: 我有一个Spring应用程序,我认为它存在一些瓶颈,因此我想用一个探查器运行它来衡量哪些功能需要花费多少时间。有什么建议我应该怎么做? 我正在运行STS,该项目是一个maven项目,并且正在运行Spring 3.0.1 问题答案: 我已经使用Spring AOP做到了。 有时,我需要有关在项目中执行某些方法(例如,控制器的方法)花费多少时间的信息。 在servlet xml中,我把 另

  • 本文向大家介绍写一个方法对对象中的key进行排序相关面试题,主要包含被问及写一个方法对对象中的key进行排序时的应答技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍使用Raygun对Node.js应用进行错误处理的方法,包括了使用Raygun对Node.js应用进行错误处理的方法的使用技巧和注意事项,需要的朋友参考一下 用我们的 raygun4node 包,能提供一种把您的Node.js错误发送给Raygun的便利办法. 它可以很容仪的使用 npm 安装:   其能给您提供一个raygun客户端,您可以用它来配置您的API key,并且可以用来