[Seasar-user:16466] Re: TeedaTestCase の org.seasar.framework.exception.NoSuchConstructorRuntimeException

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 12月 8日 (月) 18:00:19 JST


小林 (koichik) です.

Date:    Mon, 8 Dec 2008 16:44:55 +0900 (JST)
From:    <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16465] TeedaTestCase の  org.seasar.framework.exception.NoSuchConstructorRuntimeException

> Serviceクラスを作成し、テストを行っていますがエラーが発生してしまい
> 困っています。Serviceクラス(DosBaseReportService )は、AbstactReportService というクラスを継承しており、コンストラクタで親クラスのコンストラクタを呼んでいますが、どうやらsuper()のところで
> org.seasar.framework.exception.NoSuchConstructorRuntimeException
> が発生しているようです。
> 
> /****
>  * テストクラス
>  *
>  */
> public class DosBaseServiceTest extends TeedaTestCase{
> 
>     DosBaseReportService dosBaseReportService;

このフィールドを削除してください.

テストメソッドを実行する前に,TeedaTestCase は
このフィールドにコンポーネントを設定するため
DosBaseReportService をインスタンス化しようとします.
しかし,DosBaseReportService には引数のない
コンストラクタ (デフォルトコンストラクタ) が
存在しないため,

> org.seasar.framework.exception.NoSuchConstructorRuntimeException: [ESSR0064]クラス(nsdos.service.DosBaseReportService$$EnhancedByS2AOP$$1682a53)のコンストラクタ(DosBaseReportService$$EnhancedByS2AOP$$1682a53())が見つかりません

ということになります.
このテストメソッドでは,

>         DosBaseReportService dosBaseReportService = new    
>     DosBaseReportService(path);
>         dosBaseReportService.writeExcel();

という使い方をしているのでインスタンス
フィールドは不要です.

もしコンテナから DosBaseReportService の
インスタンスを取得する必要があるなら,
dicon でコンストラクタの引数を指定する
必要があります.

<component class="DosBaseReportService">
  <arg>"C"</arg><!-- コンストラクタ引数 -->
</component>

http://s2container.seasar.org/2.4/ja/DIContainer.html#ConstructorInjection


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