Pergunta

Estou a escrever algum código JNI em C que gostaria de teste usando cunit. A fim de chamar as funções JNI, eu preciso criar um struct JNIEnv válido.

Alguém sabe se existe um quadro de zombaria para tal finalidade, ou quem pode me dar algumas dicas sobre como criar um JNIEnv simulada me struct?

Foi útil?

Solução

jni.h contém a estrutura completa para JNIEnv_, incluindo a "mesa salto" JNINativeInterface_. Você pode criar seu próprio JNINativeInterface_ (apontando para implementações de simulação) e instanciar um JNIEnv_ dela.

Editar em resposta aos comentários: (eu não olhar para o outro SO pergunta você referenciou)

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

Outras dicas

Mocking JNI soa como um mundo de dor para mim. Eu acho que são susceptíveis de ser melhor zombando das chamadas implementadas em Java, e usando JUnit para testar a funcionalidade do lado do java

Citação: ". Jnimock é implementado em cima do gmock Ele fornece duas classes C ++ 'JNIEnvMock' e 'JavaVMMock' para separadamente simulada 'JNIEnv' e 'JavaVM'"

https://github.com/ifokthenok/jnimock

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top