サーバ管理者/開発者メモ書き・Linux、Windows等々

開発情報、サーバ管理・設定、モバイルなどの情報です。

全体表示

[ リスト ]

当たり前の話しですが、privateメソッドは、他のクラスから呼べません。
しかし単体テストなどで、どうしても呼びたくなります。

以下、reflectionを使った参考。
テストする側のクラスには、
import java.lang.reflect.Method;
を使用します。


//テスト対象のクラス
public class HelloWorld {
//引数なし
private int pMethod() {
System.out.println("aa");
return 1;

}

//引数あり
private String pMethod1(String str1, String str2) {
System.out.println(str1 + " " + str2 );
return "private!";

}
}



//テストする側
import java.lang.reflect.Method;

テストクラス

public void test() throws Exception{

// クラス取得
Class<HelloWorld> c = HelloWorld.class;

// //引数なしのメソッドテスト
// // メソッド取得(メソッド名を文字列として指定)
// Method m = c.getDeclaredMethod("pMethod");
//
// // Privateメソッドの場合、以下の設定が必要
// m.setAccessible(true);
//
// Integer ret = (Integer) m.invoke(c.newInstance());
// System.out.println(ret);

// -----

// 引数の分、クラス型の配列を定義する。
Class[] args = { String.class, String.class };
Method m = c.getDeclaredMethod("pMethod1", args);
String str1 = "ABC, ZZZ";
String str2 = "9876543210";

m.setAccessible(true);

// 第二引数以降にメソッドに渡す引数をセット
String ret = (String) m.invoke(c.newInstance(), str1, str2);
System.out.println(ret);

} 

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事