سؤال

وأنا أكتب بعض رمز JNI في C أود أن اختبار باستخدام كونيت. من أجل استدعاء وظائف 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 يبدو وكأنه عالم من الألم بالنسبة لي. أعتقد أنك من المحتمل أن تكون أفضل حالا ساخرا من دعوات تنفيذها في جاوة، واستخدام أداة JUnit لاختبار وظيفة على الجانب جافا

اقتباس: ".. ويتم تنفيذ jnimock على رأس gmock ويوفر فئتين C ++" JNIEnvMock "و" JavaVMMock "لوهمية على حدة" JNIEnv "و" JavaVM "

https://github.com/ifokthenok/jnimock

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top