質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

11734閲覧

JUnitでprivateのenum型へのアクセス方法

PandaSan

総合スコア12

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/06/14 15:09

編集2015/06/15 14:29

JUnitでprivateなenum型を引数に取る、privateメソッドへのテストコードの記載方法がわかりません。
何卒お知恵を拝借できればと思います。
以下が実際のコードとなります。

lang

1public class Product { 2 private enum BloodType {A, B, O, AB} 3 private String getBloodType(BloodType bt) { 4 String msg = ""; 5 switch(bt) { 6 case A: 7 msg = "A"; 8 break; 9 case B: 10 msg = "B"; 11 break; 12 case O: 13 msg = "O"; 14 break; 15 case AB: 16 msg = "AB"; 17 break; 18 } 19 return msg; 20 } 21} 22 23public class ProductTest { 24 @Test 25 public void BloodTypeTest() { 26 Product product = new Product (); 27 Method method = Product .class.getDeclaredMethod("getBloodType", ※ここの部分と); 28 method.setAccessible(true); 29 String actual = (String)method.invoke(product, ※ここの部分); 30 } 31}

上記の※の部分が分かりません。アクセス可能な方法があるようでしたらご教示頂けますと幸いです。
それでは、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

lang

1public class ProductTest { 2 @Test 3 public void BloodTypeTest() { 4 Object[] enumBloodType = null; 5 for (Class cls : Product.class.getDeclaredClasses()) { 6 if (!"BloodType".equals(cls.getSimpleName())) continue; 7 enumBloodType = cls.getEnumConstants(); 8 break; 9 } 10 Object bloodTypeA = null; 11 for (Object o : enumBloodType) { 12 if (((Enum)o).name().equals("A")) { 13 bloodTypeA = o; 14 break; 15 } 16 } 17 18 Product product = new Product (); 19 Method method = Product .class.getDeclaredMethod("getBloodType", bloodTypeA.getClass()); 20 method.setAccessible(true); 21 22 String actual = (String)method.invoke(product, bloodTypeA); 23 24 assertThat(actual, is("A")); 25 } 26}

教えていただいたサイトを参考に上記のコードで解決できました。
今後テストの必要性が出た時には利用したいと思います。

ありがとうございました。

投稿2015/06/15 14:39

PandaSan

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそも、Privateな要素はテストの対象外です。
そのようなことは、する必要がありません。

投稿2015/06/14 15:28

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PandaSan

2015/06/15 14:13

確かにご指摘の通り、I/Fとして公開しているpublicなメソッドから呼んでいるため、 publicメソッドに適切なデータでテストすれば問題ないと分かりました。 アドバイスありがとうございました。
guest

0

ベストアンサー

他サイトの情報になりますが、こちらのページが参考になると思います。
ネストしたenumへのリフレクションによるアクセス 【OKWave】

投稿2015/06/14 15:23

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PandaSan

2015/06/15 14:16

情報ありがとうございます。 ご教示頂いたサイトを参考にさせて頂き、そのままの方法で2つ目の※の部分は解決したのですが、1つ目の※がどうかけばいいか分らないままです。 根本的にJavaの型が分かっていないようなので、もう少し調べてみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問