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