[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 メーリングリストの案内