Question

J'écris du code JNI en C que je souhaite tester avec cunit. Pour appeler les fonctions JNI, je dois créer une structure JNIEnv valide.

Est-ce que quelqu'un sait s'il existe un cadre moqueur à cette fin ou qui peut me donner des indications sur la création d'une maquette de JNIEnv?

Était-ce utile?

La solution

jni.h contient la structure complète de JNIEnv_, y compris la "table de sauts". JNINativeInterface_. Vous pouvez créer votre propre JNINativeInterface_ (pointant vers des implémentations factices) et instancier un JNIEnv_ à partir de celui-ci.

Modifier en réponse aux commentaires: (je n’ai pas regardé l’autre question SO que vous avez mentionnée)

#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;
}

Autres conseils

Se moquer de JNI me semble être un monde de douleur. Je pense que vous feriez mieux de vous moquer des appels mis en œuvre en Java et d'utiliser Junit pour tester les fonctionnalités côté java

Citation: "jnimock est implémenté au-dessus de gmock. Il fournit deux classes C ++, "JNIEnvMock" et "JavaVMMock", qui permettent de simuler séparément "JNIEnv" et "JavaVM". "

https://github.com/ifokthenok/jnimock

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top