[Seasar-user:5157] Re: PropertyInterTypeを使用した場合のテスト実行について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 11月 16日 (木) 18:00:16 JST


小林 (koichik) です.

原因分かりました.

Date:    Thu, 16 Nov 2006 13:02:12 +0900
From:    AGATA Toshitaka <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:5147] Re: PropertyInterTypeを使用した場合のテスト実行について

> > この現象は,S2FrameworkTestCase がテストメソッドを
> > 実行するたびにクラスローダーを作成してスレッドの
> > コンテキストクラスローダーに設定していることと,
> > S2AOP がエンハンスした (InterType が適用された) ク 
> > ラスを
> > コンテキストクラスローダーにロードしていることが,
> > Javassist によってコンパイルされるバイトコードと
> > 相性がよくないために発生しているようです.

相性の問題ではありませんでした.
縣さんのテストケースは

> > 先に添付した Desc クラスの static フィールドである
> > useContextClassLoader を true にすると問題になっている
> > 箇所はクリアしましたが,その後別の例外が発生します.

この対応だけで通りました.

こちらでは S2-Tiger にある Intertype のテストケースを
S2FrameworkTestCase の派生クラスにして確認していたのですが,
そこでは可視性がデフォルト (package) のフィールドを使っており,
S2FrameworkTestCase がテストメソッドごとに用意するクラスローダーに
ロードされたサブクラス (Intertype が適用されたクラス) は
JVM にはパッケージが異なると判断されて親クラスのフィールドに
アクセスできないために例外が発生していました.

縣さんのように,フィールドが protected になっていれば
エンハンスされたサブクラスが別のクラスローダーに
ロードされてもフィールドにアクセスできるので問題ありません.

S2FrameworkTestCase では Desc#useContextClassLoader を
true に設定してテストメソッドを呼び出すようにします.
この修正は次のリリースに含まれます.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




Seasar-user メーリングリストの案内