単体テストのメソッドの引数に値を設定する方法 - JAVA言語

このQ&Aのポイント
  • 単体テストのテストケースにて引数に値を入れたい場合、どのように設定すれば良いのかを教えてください。
  • 引数がString型の場合、メソッドに値を設定するためには、インスタンスを生成し、そのメソッドに値を渡す方法があります。
  • 例えば、MessagesクラスのgetMessageメソッドにHelloという値を設定する場合、以下のようなコードを記述します。Messages messages = new Messages(); messages.getMessage("Hello");
回答を見る
  • ベストアンサー

単体テストのテストケースにて引数に値を入れたいです

使用言語:JAVA言語 単刀直入ですが、djunitでの単体テストのメソッドの引数に値を設定したいですがどうすればいいのでしょうか? 引数がString型 Messageクラス public class Messages { public String getMessage(String message) { return message ; } } テストケース作成 public void testGetMessage001() { System.out.println("[testGetMessage001]"); Messages messages = new Messages(); System.out.println(messages.getMessage("Hello")); } とやれば、インスタンス生成してgetmessageメソッドにHelloが入ります。 問題は次の場合で仮にAxxクラスとして Public class Axx{     Public void getAxx(HttpServletRequest request){ ~処理~ } } 引数に(クラス名 オブジェクト名?) この場合、テストケースに Axx axx = new Axx(); System.out.println(messages.getAxx("????")); のようにMessageクラスと同じようにできるのでしょうか? それとも別の方法でHttpServletRequest requestに値をセットできる方法があるのでしょうか? よろしくお願い致します。

noname#189082
noname#189082
  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

HttpServletRequest はインターフェイスなので、それを実装したクラスのインスタンスを getAxx メソッドに渡してやる必要が有りますね。 現実的には下記のどちらかの方法になるかと思います。 a. テスト用に HttpServletRequest を実装したクラスを作る。 b. EasyMock, JMock などのモックオブジェクト生成ライブラリを使う。 djUnit の Virtual Mock Objects は、実装されているメソッドの動作を変えられますが、インターフェイスからの実装クラスを生成することは出来なかったかと。

その他の回答 (1)

回答No.1

こうでしょうか・・? Axx axx = new Axx(); //コンストラクタには必要なら引数を指定してください HttpServletRequest myRequest = new HttpServletRequest(); System.out.println(axx.getAxx(myRequest));

関連するQ&A

  • doGetの引数に「入るモノ」について

    サーブレットにおけるクラスのdoGetメソッドについて 質問です(Tomcat3.2.1 + JDK1.3)。 public void doGet(HttpServletRequest request, HttpServletResponse response) 理屈で考えると、このdoGetメソッドの2つの仮引数 (request, response)には、 「インターフェースHttpServletRequestをimplements したクラス」のインスタンス ‥‥と、 「インターフェースHttpServletRequestをimplements したクラス」のインスタンス の2つのインスタンスが入れられるハズですよね。 そこで疑問なのが、 1. それら2つのクラスの名前はなんというのでしょう? (というのはインターフェースHttpServletRequestや インターフェースHttpServletResponseを 実装したクラスのメソッドの処理内容の定義を 見たいのです‥) 2. 誰がそのクラスをインスタンス化しているのでしょう? (サーブレットコンテナのTomcat? JRE? JVM?‥ いったい誰が?‥‥用語の区別も曖昧なのですが) 補足すると、 Javaアプリケーションのmainメソッドでは、 public static void main(String[] args) として、コマンドラインの引数がそのまま仮引数argsに 入る。じゃあ、サーブレットの場合はどうなのか? といった感じです。 2.のほうはトンチンカンな質問かもしれませんが、 1.の質問は切実です。 ご存知の方、教えてください。

    • ベストアンサー
    • Java
  • コマンドライン引数の*(アフタリスク)の表示について教えて下さい

    皆様どうぞよろしくお願い申し上げます。アドバイス下さい。 java言語で質問です。調べたかぎりわからないことが起こりました。次のものです。コマンドライン引数で引数1は数字、引数2は数字、引数3は* で表示させるプログラムを作りました。引数3番目の演算子*(アフタリスク)を表示する場合にうまく表示できません。 C:\java>java test 2.0 15.0 * 2.0 15.0 Calculation.class ←表示されません。 プログラムは以下のものを作りました。見てください。 /** * 実行クラス:引数テストクラス */ class test{ public static void main(String args[]) { //引数を取得 double num1 = Double.parseDouble(args[0]); //引数1(数値) double num2 = Double.parseDouble(args[1]); //引数2(数値) String kigou = args[2]; //引数3(計算記号) //画面に出しています。 System.out.println(num1); System.out.println(num2); System.out.println(kigou); } }

  • 実行時引数をrun()メソッドに渡すには?

    初めまして。宜しくお願いします。 Javaの初心者で現在勉強中で、一定時間ごとに命令を走らせるプログラムを作ろうとしており、様々なサイトや本を参考にした結果、Timerクラス、TimerTaskクラスを使うと良さそうという事がわかりました。 一定周期毎に標準出力するのみのプログラムなら出来たのですが、実行時引数を一定周期毎に標準出力するプログラム作成時に躓いてしまいました。 望む挙動: $ java test1 abcdef とターミナルに入力して、一定周期毎に、"abcdef"が表示し続ける挙動。 躓いている点: main()メソッドからrun()メソッドに実行時引数(この場合、String st = String new args[0];)を渡そうと試みてる点。 -----------------ソースコード--------------------- import java.util.Timer; import java.util.TimerTask; public class test1 { public static void main(String args[]) throws Exception{ String st = new String(args[0]); Timer timer = new Timer(); timer.schedule(new TestTimer(), 0, 1000); } /** * 指定間隔置きに呼ばれる処理 */ static class TestTimer extends TimerTask{ public void run(){ System.out.println(st); // System.out.println("Hello, World!"); } } } ---------------------------------------------- 宜しくお願いします。

    • ベストアンサー
    • Java
  • 仮引数について。

    こんにちは。 現在Javaを勉強中の者です。 ある程度簡単なプログラムは組めるようになったのですが、 ふと仮引数について疑問に思ったことがあったので 質問させて下さい。 まず、自己紹介をするクラスがあるとします。 そこで、入力された名前を表示する、というメソッドを作りたいのですが (1) class Introduction {     /* メンバ変数 */    String strName;     /* 名前を言う */     public void sayName(String strName) {     System.out.println("私の名前は " + strName + " です。");   } } と書くのと (2) class Introduction {   /* メンバ変数 */   String strName;   /* 名前を言う */   public void sayName(String n) {     strName = n     ~~~~~~~~~~~~     System.out.println("私の名前は " + strName + " です。");   } } と書くのでは何がどう違うのでしょうか? 特に波線部分の役割の理解に苦しんでいます。 参考書のサンプルソースを見ると、 たいていこのような記述があるのですが わざわざ代入しなくても(1)のように記述すれば 正常に出力されますよね? 実引数から値を渡されたときは 必ず(2)のような書き方をしなければならない決まりが あるのでしょうか? 長くなりましたが、ご教授いただければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • メソッドのオーバーライド(java)

    class A3{ void hello(){ System.out.println("A3"); } void hello(int i){ System.out.println("A3"+i); } } class B3 extends A3{ void hello(){ System.out.println("B3"); } } class C3 extends B3{ void hello(String s){ System.out.println("C3"+s); } } class MethodOverriding3{ public static void main(String args[]){ A3 obj = new C3(); obj.hello(); } } 上のプログラムを実行すると"B3"と表示されまが、どうしてクラスBのメソッドが実行されるのでしょうか? クラスAのメソッドが無視される仕組みがわかりません。 また、クラスMethodOverriding3でobj.hello("abc")としてコンパイルすると mo.java:25: シンボルを見つけられません。 シンボル: メソッド hello(java.lang.String) 場所 : A3 の クラス obj.hello("abc");   ^ エラー 1 個 とエラーが出ます。 どうしてでしょうか? 誰か教えてください、お願いします。

    • ベストアンサー
    • Java
  • 【Java】変数?定数?

    ↓のようなjavaのクラスの中で各メソッド毎にMETHODという名の文字列をfinalで定義した場合なのですが、METHODは変数ですか?定数ですか? public class test { public void test1 () { final String METHOD="test1"; system.out.println("メソッド名=" + METHOD); } public void test2 () { final String METHOD="test2"; system.out.println("メソッド名=" + METHOD); } }

    • ベストアンサー
    • Java
  • メソッドの引数に指定されているインタフェースについて

    最近サーブレットをいじっているので例としてサーブレットを扱いますが、一般的な話題として扱っていただければと存じます。 非常に質問を文章化しにくいのですが・・ たとえば、クラスHttpServletには以下のようなメソッドがあります。 doGet(HttpServletRequest req, HttpServletResponse resp) このメソッドの引数に指定されているHttpServletRequest/Responseはいずれもインタフェースなわけですが、メソッドの引数にインタフェースを指定するというのは、具体的にどういうことなのでしょうか? これがたとえばintだったりStringだったりした場合は簡単にイメージできるのですが、インタフェースだとさっぱりわかりません。 質問がわかりにくいかもしれませんが、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaのプログラムについての質問です。

    /* * 引数、パラメータ、戻り値を使用して * SubTest19クラスでフィールド変数を使用しないよう、 * 修正して下さい。 * * * また、SubTest19クラスのput()で行っている出力はfor文を使用する事。 * */ class Test19 {   public static void main(String[] args) {   // SubTest19クラスのインスタンス化   SubTest19 st19 = new SubTest19();   // setメソッド呼び出し:戻り値&引数無し   st19.set();   // putメソッド呼び出し:戻り値&引数無し   st19.put();   } } // SubTest19クラス class SubTest19 {   public Test19data t19d[] = null;       // setメソッド    public void set(){     t19d = new Test19data[3];     t19d[0] = new Test19data();     t19d[1] = new Test19data();     t19d[2] = new Test19data();     t19d[0].px = "K-0963";     t19d[0].ct = 23;     t19d[1].px = "T-523363";     t19d[1].ct = 517;     t19d[2].px = "J-97553";     t19d[2].ct = 5;   }     // putメソッド   public void put(){      System.out.println(t19d[0].px);     System.out.println(t19d[0].ct);     System.out.println(t19d[1].px);     System.out.println(t19d[1].ct);     System.out.println(t19d[2].px);     System.out.println(t19d[2].ct);   } } class Test19data{   // フィールド変数の宣言:String,int    public String px;    public int ct;    public Test19data(){       px = "";      ct = 0;    } } このような問題なのですが、どうしても出来ずに手詰まり状態です。丸投げで非常に申し訳ないのですが、どなたか途中までコードを書いて頂けないでしょうか?よろしくお願い致します。

  • 引数について教えてください。

    誰か教えてください。 今、このプログラム自体は引数に整数を2個入れたら加算されるように出来ていますがこれを何個入れても足せるようにしたいのですが、どのように変更したらいいのか分かりません。 すみませんが、お願いします。 public class Sample20 { public static void main(String[] argv) { if(argv.length != 1) { if(argv.length>=2) { int a,b; try { if(argv[0].indexOf(".") == -1 && argv[1].indexOf(".") == -1) { try { a=Integer.parseInt(argv[0].replaceAll("\\+" , "")); b=Integer.parseInt(argv[1].replaceAll("\\+" , "")); System.out.println(a+b); } catch(NumberFormatException e) { System.out.println("最大9桁までしか実行できません"); } } else { System.out.println("小数点は整数ではないので実行できません"); } } catch(Exception e) { System.out.println ("エラー:2個整数のみ入力して下さい"); } } else { System.out.println("エラー:何も入力されていません"); } } else { System.out.println("エラー:引数が一つしか入力されていません"); } } }

    • ベストアンサー
    • Java
  • 起動引数の表示

    Java勉強中の初心者です。 起動引数の表示について お尋ねしたいことがあります。 起動引数が入力された場合には そのまま表示、無い場合は ”起動引数無し” と表示させたいのですが 下記のソースだと java.lang.ArrayIndexOutOfBoundsException のエラーが発生してしまいます。 このような場合はどのようにしたら よいのですか? よろしくお願いします。 ---------------------------------------------- public class Ren1 { public static void main(String args[]) { if(args[0].equals(null)){ System.out.println("起動引数無し"); } String s = args[0]; System.out.println(s); } }

    • ベストアンサー
    • Java