[Seasar-user:4438] Re: S2FrameworkTestCase の unbindFields
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2006年 8月 29日 (火) 02:00:11 JST
小林 (koichik) です.
Date: Mon, 28 Aug 2006 18:07:00 +0900
From: "Ito Yoshiichi" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:4433] Re: S2FrameworkTestCase の unbindFields
> > どうやら,JUnit の TestResult が TestCase への参照を持ったままに
> > なっていて GC されないため,テストクラスのフィールドをクリアしないと
> > それらも到達可能なままとなってしまい,GC されずヒープに残って
> > しまうようです.
>
> テストに失敗した場合だけリークが発生するんですね。
そういうわけではないようです.
TestResult はテストの結果にかかわらず Test への参照を
保持しているようです.
> (1) bindFields で設定されたフィールドは tearDown、tearDownXXX
> では使用できないという仕様でしょうか?
そうですね.
> tearDown の後で unbindFields の方がいいかなとも思ったのですが。
bindFields() との対称性を考えると現在の位置がいいと思います.
tearDown の時点では S2Container#destroy() が呼び出されてしまっていて,
<destroyMethod> によりコンポーネントが利用できなくなっていることも
考えられますし.
> (2) テスト終了後 boundFields も null セットした方が良くないですか?
修正しました.
> あと、細かいですが、null セットに FieldUtil.set は使わないのでしょうか?
どうせ例外を捕まえるので,ランタイム例外に変換することが主目的の
FieldUtil#set() を使う必要はないように思います.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内