Pregunta

Estoy escribiendo un código JNI en C que deseo probar usando cunit. Para poder llamar a las funciones JNI, necesito crear una estructura JNIEnv válida.

¿Alguien sabe si existe un marco burlón para tal propósito, o quién me puede dar algunos consejos sobre cómo crear una estructura JNIEnv simulada?

¿Fue útil?

Solución

jni.h contiene la estructura completa para JNIEnv_, incluida la " tabla de saltos " Interfaz JNINative_. Puedes crear tu propio JNINativeInterface_ (que apunta a implementaciones simuladas) y crear una instancia de JNIEnv_

Edite en respuesta a los comentarios: (no miré la otra pregunta SO a la que hizo referencia)

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

Otros consejos

La burla de JNI me parece un mundo de dolor. Creo que es probable que sea mejor burlarse de las llamadas implementadas en Java y usar Junit para probar la funcionalidad en el lado de Java

Cita: " jnimock se implementa encima de gmock. Proporciona dos clases de C ++ 'JNIEnvMock' y 'JavaVMMock' para simular por separado 'JNIEnv' y 'JavaVM'. & Quot;

https://github.com/ifokthenok/jnimock

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top