我正在用C编写一些JNI代码,希望使用cunit进行测试。为了调用JNI函数,我需要创建一个有效的JNIEnv结构。
有没有人知道有没有这样的模拟框架,或者谁能给我一些关于如何自己创建一个模拟JNIEnv结构的建议?
发布于 2008-10-14 23:49:15
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;
}发布于 2008-10-14 14:48:31
嘲笑JNI对我来说听起来像是痛苦的世界。我认为您最好模拟用Java实现的调用,并使用Junit来测试Java端的功能
发布于 2017-02-25 09:08:15
引用:"jnimock是在gmock之上实现的,它提供了两个C++类'JNIEnvMock‘和'JavaVMMock’来分别模拟'JNIEnv‘和’JavaVM‘。“
https://stackoverflow.com/questions/201141
复制相似问题