如何在C / C ++中创建JNIEnv模拟
-
03-07-2019 - |
题
我正在用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'。“
不隶属于 StackOverflow