cunit を使用してテストしたい JNI コードを C で作成しています。JNI 関数を呼び出すには、有効な JNIEnv 構造体を作成する必要があります。
そのような目的のためのモックフレームワークがあるかどうか、またはモック JNIEnv 構造体を自分で作成する方法についての指針を誰が教えてくれるかを知っている人はいますか?
cunit を使用してテストしたい JNI コードを C で作成しています。JNI 関数を呼び出すには、有効な JNIEnv 構造体を作成する必要があります。
そのような目的のためのモックフレームワークがあるかどうか、またはモック JNIEnv 構造体を自分で作成する方法についての指針を誰が教えてくれるかを知っている人はいますか?
jni.h には、「ジャンプ テーブル」JNINativeInterface_ を含む、JNIEnv_ の完全な構造が含まれています。独自の 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 を嘲笑することは、私にとって苦痛の世界のように思えます。Java で実装された呼び出しをモックし、Junit を使用して Java 側の機能をテストする方がよいと思います。