我正在用C编写一些我希望使用cunit测试的JNI代码。为了调用JNI函数,我需要创建一个有效的JNIEnv结构。

有没有人知道是否有一个用于此目的的模拟框架,或者谁可以给我一些关于如何自己创建模拟JNIEnv结构的指针?

有帮助吗?

解决方案

jni.h包含JNIEnv_的完整结构,包括“跳转表”。 JNINativeInterface_。您可以创建自己的JNINativeInterface_(指向模拟实现)并从中实例化JNIEnv_。

编辑以回应评论:(我没有看你引用的其他SO问题)

#include "jni.h"
#include <iostream>

jint JNICALL MockGetVersion(JNIEnv *)
{
  return 23;
}

JNINativeInterface_ jnini = {
  0, 0, 0, 0, //4 reserved pointers
  MockGetVersion
};

// class Foo { public static native void bar(); }
void Java_Foo_bar(JNIEnv* jni, jclass)
{
  std::cout << jni->GetVersion() << std::endl;
}

int main()
{
  JNIEnv_ myjni = {&jnini};
  Java_Foo_bar(&myjni, 0);
  return 0;
}

其他提示

嘲弄JNI听起来像是一个痛苦的世界。我认为你可能会更好地模拟用Java实现的调用,并使用Junit来测试java端的功能

引用:&quot; jnimock是在gmock之上实现的。它提供了两个C ++类'JNIEnvMock'和'JavaVMMock'来分别模拟'JNIEnv'和'JavaVM'。“

https://github.com/ifokthenok/jnimock

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top