Domanda

Sto scrivendo un codice JNI in C che desidero testare usando cunit. Per chiamare le funzioni JNI, devo creare una struttura JNIEnv valida.

Qualcuno sa se esiste un framework beffardo per tale scopo, o chi può darmi alcuni consigli su come creare un JNIEnv finto strutturando me stesso?

È stato utile?

Soluzione

jni.h contiene la struttura completa per JNIEnv_, inclusa la tabella di salto "quot" " JNINativeInterface_. Puoi creare il tuo JNINativeInterface_ (indicando implementazioni fittizie) e creare un'istanza di un JNIEnv_ da esso.

Modifica in risposta ai commenti: (non ho esaminato l'altra domanda SO a cui hai fatto riferimento)

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

Altri suggerimenti

Deridere JNI suona come un mondo di dolore per me. Penso che probabilmente starai meglio deridendo le chiamate implementate in Java e usando Junit per testare la funzionalità sul lato java

Citazione: " jnimock è implementato sopra gmock. Fornisce due classi C ++ 'JNIEnvMock' e 'JavaVMMock' per deridere separatamente 'JNIEnv' e 'JavaVM'. & Quot;

https://github.com/ifokthenok/jnimock

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top