• 締切済み

Springで親クラスのインジェクションはダメ?

Springフレームワークで、Bean定義ファイルに親クラス、子クラスともに定義しました。 親クラスの単体テストとして、JUnitに親クラスのセッターを用意してテスト実行したところエラーとなりました。スタックトレースには、beanIdがuniqueでない旨のメッセージと、親クラスと子クラスのbeanIdが表示されています。 子クラスの定義をはずすとうまくいくところから、継承関係にあるクラスを定義して親をインジェクションするのはできないんじゃなかろうかと思うのですが、それを記したサイトが見当たりませんでした。 その辺りをのせてるマニュアルサイト等をご存知でしたら、教えてください。

みんなの回答

noname#147388
noname#147388
回答No.1

> スタックトレースには、beanIdがuniqueでない旨のメッセージ public class A {  private int foo; // アクセサ省略 } public class B extends A {  private long foo; // アクセサ省略 } 上記のように同じフィールドの定義がされているからダメなのでは? ソースがみえないからエスパー的に予知してみる。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SpringでサーブレットをUNITテストするには

    はじめまして。 Spring2.5のモック 「MockHttpServletRequest」や 「MockHttpServletResponse」を利用して、 JUnit4でテストしようと数日試しています。 @Test Public void testGet() { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); ABCServlet testWork = new ABCServlet(); try { testWork.doGet(request, response); } catch (Exception e) { e.printStackTrace(); fail("NGResultTest"); } } ABCServlet内のdoGetが、 protected voidで定義されている為、 そこをPublic voidに変更すれば 動くのですが、 大量に同じようなJavaサーブレットファイルが存在して、 テストのたびに毎回その変更をするのは 現実的ではない状態です。 そこで1点質問させてください。 Springで上記のようなJavaサーブレットを (protected voidのdoGet) JUnit4でテストする場合、 みなさんどのようにテストなさっていらっしゃるのでしょうか? なお、 上記のテスト方法以外でも、、 Javaサーブレットを自動テストする 良い方法がございましたら、 ぜひ教えてください。 (Jakarta Cakutasを利用しようと思ってネットで調べたところ、  JUnit3対応のみで、JUnit4で使えないようでした。  JUnit4関係で利用可能な方法を教えていただけると  ありがたいです) 以上になります。 どうぞよろしくおねがいします。

    • ベストアンサー
    • Java
  • JUnit結果出力をファイルに書き出す

    お世話になります。 JUnitの結果をファイルに書き出すにはどうしたらよいでしょうか? eclipseを使ってテストを行っています。 junit.textui.TestRunnerを使用しています。 テストが失敗したりすると Time: 0.031 There was 1 failure: 1) 失敗したテスト名 スタックトレース FAILURES!!! Tests run: 18, Failures: 1, Errors: 0 のように表示されますが、 この結果をファイルに出力するにはどうしたらよいでしょうか?

    • ベストアンサー
    • Java
  • JUnitでのプライベートメソッドのテストについて

    JavaSE6で開発をしております。 eclipse3.6を用いて、JUnit3でテストを行っているのですが、 クラスのプライベートメソッドをテストするにはリフレクション以外の方法はないのでしょうか。 リフレクションを使う方法ですと、テストコードが複雑になりがちで、publicメソッドに比べると、テストするのがしんどいです。 JUnit3に限らない、他のテストフレームワークでも構いませんので、プライベートメソッドをテストする、よい方法はないものでしょうか。

    • ベストアンサー
    • Java
  • クラスの継承でメンバ変数が・・

    初めてクラスの継承をしている者です。 親クラスA のメンバ変数らを 親クラスAからの処理で呼び出した 子クラスB で変更したいのですが、 子クラスB内ではちゃんと処理で数値が変化するのですが、 親クラスAに戻ると数値が全て初期値に戻ってしまいます。 継承方法は単に public 親クラスA と記述しているだけで、 親クラスAと子クラスBは別々のファイルに1クラスずつで記述しています。 コンパイルは警告もエラーも出ず動きます。 子クラスから親クラスのメンバ変数を変更するにはどうすれば良いのでしょうか?

  • 子クラスのインスタンスから親クラスのインスタンス変数の内容を表示する親クラスのメソッドを叩きたい

    お世話になっております。 rubyのコーディングで疑問が発生しましたので、質問させてください。 以下の様にクラスを定義してあるとします クラスA 体裁を整えて標準出力するクラス  ・インスタンス変数@Aを持つ  ・@Aを元に整形して標準出力する振る舞いを持つ クラスB Aの子クラスで、標準出力する内容を細かく設定するクラス  ・独自のインスタンス変数は持たない  ・親クラスのインスタンス変数@Aを編集する振る舞いを持つ 上記の実装である時、クラスBの振る舞いでクラスAのインスタンス変数@Aを編集しようとした際にエラーが発生します。 尚、レシーバはsuperです。 エラー内容 ./clsb.rb:49:in `edt_dsp': super: no superclass method `edt_dsp' (NoMethodE rror) エラー文中に出てる'edt_dsp'というメソッドが親クラスのインスタンス変数を編集するメソッドです。 尚、子クラスには独自の変数は無いのでinitializeメソッドは定義していません。 なぜこのようなエラーが発生してしまうのかわからず困っています。 現在自分でも色々とサイトを回って調べていますが、解決には至っていません。 ご回答いただければ幸いです。 以上です。よろしくお願いします。

    • ベストアンサー
    • Ruby
  • コンストラクタの記述について ―引数を持ったクラスを継承する場合―

    コンストラクタの記述について ―引数を持ったクラスを継承する場合― ActionScript3.0でプログラミングをしています。 クラスの継承に挑戦したのですが、うまくいきません。 コンストラクタの記述は、何か特別なものが必要なのでしょうか? ■コンストラクタに引数なし → 成功。 ■コンストラクタに引数あり → 失敗。  エラー「No default constructor found in base class <親クラスの名前>」。 ■エラーの出るソース↓ ・Main.as(コンストラクタ内抜粋)     var parent:Parent = new Parent(100);     var child:Child = new Child(200); ・Parent.as package {   import flash.display.Sprite;      public class Parent extends Sprite {     protected var str:String = "親クラスのプロパティ";     public function Parent(inNum:Number):void {       trace("親クラス, ", str, inNum);     }   } } ・Child.as package {   import Parent;   public class Child extends Parent {     public function Child(inNum:Number):void { //■エラー。       trace("子クラス, ", str, inNum);     }   } } ご存知の方、よろしくお願いします。 よろしくお願いします!

    • ベストアンサー
    • Flash
  • 【VC++】クラスの追加方法について

    VC++の操作方法についての質問です。 現在、VC++2005を用いて、MFCダイアログベースアプリケーションを作成しています。 クラスの追加方法についての質問ですが、 「クラスビュー」⇒「プロジェクト」で右クリック⇒「追加」⇒「クラス」でウィザードに従って追加すると、 ウィザード内で基本クラスをコンボボックスより選択しなければならず、 この方法で追加すると、選択した基本クラスを継承する形でクラスが自動生成され、クラスビューにマップと基本型が追加されます。 現在作成に当たって参照しているサンプルプログラムでは、新たにクラスが定義されているようですが、 マップと基本型は生成されておらず、基本クラスも定義されていないのです。 どのように操作すれば、サンプルのように基本クラスを定義せず、 マップと基本型も追加されずに、クラスを追加できるのでしょうか? また補足ですが、クラスを追加した後は、別の自分で定義した親クラスを継承させるようにコードを変更したいと思っております。 お分かりの方おられましたら、お手数ですがご教授お願い致します。

  • テーブルの1レコードを継承してクラスを定義する方法

    あるサイト(URLは忘れました。)で、 「  テーブルの1レコードを定義したクラスを、継承  して、新しいクラスの中でテーブルを作成する。                        」 と記載されていたのですが、コーディング上どのよう にするかを迷っております。 ご指導のほどお願いします。 記憶にある図解です。 ┌──────────┐extends 1レコードクラス │          │ │┌┬┬┬┬┬┬┬┬┐│ ││││││││││││ │└┴┴┴┴┴┴┴┴┘│ │          │ └──────────┘ ┌┐ ││が1レコードクラスに相当します。 └┘

    • ベストアンサー
    • Java
  • クラスの使い方

    php5です。 --- test1.class.php --- class TEST1 { function hoge1() { // 実際に複雑な処理ですが概要として簡易化してます $aaa = 'hoge1'; // クラスの実行で単純に戻り値を返す return $aaa; } } --- test2.class.php --- class TEST2 { function hoge2() { // 実際に複雑な処理ですが概要として簡易化してます $bbb = 'hoge2'; // クラスの実行で単純に戻り値を返す return $bbb; } } --- MySmarty.class.php --- require_once 'test1.class.php'; require_once 'test2.class.php'; class MySmarty extends Smarty { function MySmarty() { //ここでclassTEST1,2の戻り値を利用しif文で分岐をしたい if ($aaa == 'hoge1') { $ccc = 'あああ'; } elee { $ccc = 'いいい'; } if ($bbb == 'hoge2') { $ddd = 'ううう'; } elee { $ddd = 'えええ'; } $this->assign('aaa', $aaa); $this->assign('bbb', $bbb); ・・・ } } このような使い方はできないものでしょうか?クラスに触れてまだ間も無く理解も深めれて いない状態で参考サイトなどを調べてみたのですがこのような使い方を書いている説明は みつかりませんでした。 思いつく方法としてはMySmartyに継承すればいいようなのですが継承は1つまでと 制限があるようでそれもできない状態です。 単純に1つのクラスにまとめて書けば済むような気もあるのですが他にも別のクラスの 戻り値を利用して分岐等をさせたく思っているのですがこの場合どうすればいいのでしょうか? もし不可能な場合(可能だけど方法的に良くない場合)の別の方法としてアドバイスを 頂けますと幸いです!宜しくお願いします!

    • 締切済み
    • PHP
  • C++のクラスの仮想デストラクタについて

    C++のクラスの仮想デストラクタについて教えてください。 デストラクタは、クラスの名前の前にチルダを付けたものが名前になりますが、とあるクラスの継承クラスは、その親クラスとクラス名が違うので、デストラクタの名前も親クラスのものとは別になる。つまり。継承関係のあるクラスでもデストラクタはオーバーライドせず、各クラス毎に別の名前で存在する、ということになると思います。 ですので http://wisdom.sakura.ne.jp/programming/cpp/cpp31.html このページの下部にあるように、「デストラクタは、派生クラスから基本クラスへ向かって順番に呼び出される」というのもなんとなく合点が行きます。 しかし、仮想デストラクタというものがあることを知りました。 上記のようにデストラクタは継承関係のあるクラス間でも、それぞれクラス毎に作ればよいと思っていましたが、子クラスの方でオーバーライドする必要がある場合があるのでしょうか。あるとすれば、それはどんな場合なのでしょうか。 また、上記のURLでは、「C++ 言語のデストラクタはオーバーライドを行いません」と書いてあり、なんだかよく分からなくなってきました。仮想デストラクタというものが存在するのに? どなたか詳しい方いらっしゃいましたらご教示頂けると幸いです。