2008年10月7日火曜日

動的AOPをJUNITしたらエラー

JunitTestの最中にjava.lang.IllegalAccessErro
が発生。メッセージはAop(動的拡張)されたクラスと元のクラスの関係のようだ。
class Xxxx$$Enhance...$$ cannot access its superclass Xxxx
--- しばらく調査:
//http://tech.groups.yahoo.com/group/junit/message/6508
によれば、このエラーは、アクセスできないフィールドやメソッドを修正したり呼び出したりした場合に発生し、その原因としては実行時にクラス定義が互換性をなくすように変更されていた場合となっている、とのことだ。
public な Consutructorがないのが原因かなと思って入れてみたりしたがだめ。ほぼ同じ構成のテストが動作しているので比較してみると、Privateな要素に問題があるようだ。
結局、問題は以下の点だった。
* AOPの対象となるクラスが、Testクラスの内部Privateクラスであった
* AOP系のロジックはTestクラスにて書いていた
よって、コンパイルまでは問題ないのだが、実行してみるとAOPで作成されたクラスは、Privateな内部クラスの子供であるため、親クラスとしては参照できなくなり上記のエラーが発生してしまった。

[[ 教訓 ]]
cannot access => Scopeが何か(public, protected, package, private)に注目すること!

iPhone関連:
iPhone開発で使用するCocoaはObjective-Cであり、Java/Perl/Python/Rubyなどとブリッジ可能

ついでにメモ:
S2TestCase でトランザクションテスト:
setup() で、include("j2ee.dicon")をしておいて、テストメソッド名の最後にTxをつける
参考(http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/seasar/s2-struts/doc/S2Unit.html?rev=1.1)

0 件のコメント: