私はJRubyを介してJavaアプリ内にRubyを埋め込んでおり、特定のRubyスクリプトがさまざまなメソッドを定義しているかどうかをテストする必要があります。私は非常に単純なJRubyのセットアップを持っています:
ScriptingContainer container = new ScriptingContainer();
Object receiver = container.runScriptlet(new FileReader(SCRIPT_PATH));
これらのSCRIPT_PATH
内容のファイルは次のとおりです。
def processDoc(doc)
return doc
end
スクリプトがメソッドを定義したかどうかを確認したいのですprocessDoc
が、実際に呼び出す以外の方法を見つけることができませんprocessDoc
。これは避けたいと思います。次の成功したアサーションのセットが示すように、私は試しましたがrespond_to? 'processDoc'
、methods.include? 'processDoc'
どちらも機能しません。
Object doc = new Object();
assert container.runScriptlet("respond_to? :processDoc") == Boolean.FALSE;
assert container.runScriptlet("methods().include? 'processDoc'") == Boolean.FALSE;
assert receiver == null;
assert container.callMethod(receiver, "processDoc", doc) == doc;
単純なJRubyスクリプトが実際にメソッドを呼び出さずに、特定の名前のメソッドを定義しているかどうかを判断するために使用できる他の手法はありますか?