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

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

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

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

Java

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

Q&A

解決済

1回答

1921閲覧

JUnitのprivateメソッドのテストで、invokeの第1引数にgetClass()を指定してもテスト成功するのは何故?

ametyan

総合スコア43

JUnit

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

Java

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

0グッド

0クリップ

投稿2019/02/22 14:11

下記のコードにおいて、invokeの第1引数にgetClass()を指定しましたが、問題なくテスト成功しました。
invokeの第1引数はテスト対象(Main.java)のインスタンスを指定しないといけないと思ってましたが、何故getClass()でも大丈夫なのでしょうか?
getClass()ってMainTest.javaのインスタンスを呼んでいるんですよね?

java:Main.java

1package test; 2 3public class Main { 4 5 private Main() {}; 6 7 private static int sum(int n, int m) { 8 return n + m; 9 } 10 11}

java:MainTest.java

1package test; 2 3import static org.hamcrest.CoreMatchers.*; 4import static org.junit.Assert.*; 5 6import java.lang.reflect.Method; 7 8import org.junit.Test; 9 10public class MainTest { 11 12 @Test 13 public void sumTest() throws Exception { 14 int expected = 10; 15 16 Method method = Main.class.getDeclaredMethod("sum", int.class, int.class); 17 method.setAccessible(true); 18 19 int actual = (int)method.invoke(getClass(), 8, 2); 20 21 assertThat(expected, is(actual)); 22 } 23 24}

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

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

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

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

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

guest

回答1

0

自己解決

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/reflect/Method.html
invokeメソッドの記述を読むと
「基本となるメソッドがstaticの場合、指定されたobj引数は無視されます。nullも指定できます。 」
とあります。無視されたようです

投稿2019/02/23 00:37

ametyan

総合スコア43

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問