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

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

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

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

Java

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

Q&A

解決済

1回答

5610閲覧

Junit:他クラスの変数を参照して比較して一致しているかのテストをしたい。

jin007

総合スコア34

JUnit

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

Java

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

0グッド

0クリップ

投稿2019/06/10 06:36

実施したいこと

Junitのテストでクラスごとにテストをしています。
クラスのメソッド内で使われている変数をテストクラスで参照(同じ変数を確認)して比較してあっているかを確認したいです。

制約

→異なるJavaプロジェクト、同じパッケージ名
Food
Lmain
LFood.java

FoodTest
Lmain
LFoodTest.java

java

1package app; 2 3public class Food { 4 public void whatFruit() { 5 Fruit fruit = new Fruit(); // 今回このFruitクラスの記述は値を取得するだけなので省略しています。 6 String result = null; 7 8 result = fruit.buyFruit(); // ←この変数(result) 9 } 10}

java

1packkage app; 2 3public class FoodTest { 4 public void testWhatFruit() { 5 Food food = new Food(); 6 7 // ▽▽▽▽ここで確認したい。▽▽▽▽ 8 assertThat(Foodクラスのresult(変数)の中身, equalTo("リンゴ")); 9 } 10}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/06/10 13:00

Fruit の 単体試験で行ってください
jin007

2019/06/11 02:48

>単体試験で行ってください。 それもそうなのですが、今やりたいのは「resultという変数をFoodTestクラスで比較するには?」ということなのでFruitの単体試験でと言われてしまいますと今回の求めている回答とは異なるかなと思っています。 「この変数を比較するのは不可能である」とかでしたら参考になります。 不躾な物言いで申し訳ございません。
退会済みユーザー

退会済みユーザー

2019/06/11 03:16

つまり3倍以上の手間がかかってもやりたいってことでよろしい? PowerMock 辺りで出来るはずだけど
jin007

2019/06/11 04:46

手間がかかっても方法を知りたいと思います。
guest

回答1

0

ベストアンサー

whatFruit() を実行しなければ result は存在しませんし, 実行しても終了すれば消えます.
ですのでどうやっても result は見えません.

投稿2019/06/10 14:21

jimbe

総合スコア12865

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

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

jin007

2019/06/11 02:43

whatFruit()を実行すると、resultの中に値が格納される想定です。 このresultの変数の中身をFoodTestクラスで参照したいなと思っているのですが、不可能なものなんですか?
jimbe

2019/06/11 02:58

変数は, その宣言箇所によって, 存在する期間が決まっています. その辺りをお調べになっては如何でしょうか.
jin007

2019/06/11 04:34

スコープのことでしょうか? クラスを超えて変数を参照するというのは、変数を受け渡さない限り難しいのでしょうか?
jimbe

2019/06/11 06:05

フィールドであればインスタンスがある限り存在しますので, private で無ければ直接参照できますし, private でもゲッターを作れば参照できます. しかし, スコープをご理解頂けていれば, ローカル変数が外から参照出来ないこともお分かりになるように思うのですが, なぜ result が(スコープを無視して)外から参照出来るとお考えなのでしょう.
jin007

2019/06/11 06:40

スコープを理解したうえで変数を参照するやり方があるのではないかと考え、調べたのですが見当たらなかったので質問させていただきました。 メソッド内の中のメソッドの返り値を確認したかったのですが、呼び出し先は横着せずその呼び出し先でテストすることがよさそうなんだなということが分かりました。
jimbe

2019/06/11 07:10 編集

whatFruit 内で fruit.buyFruit を呼び出しているかの確認でしたら, Food のフィールドとして Fruit を定義し, food に, テスト用に fruit.buyFruit を修正した Fruit のインスタンスを渡して確認する方法はあります. テスト手法は色々ありますが, ローカル変数の中身まで確認することは無いように思います.
jin007

2019/06/11 09:21

イメージとして、返却値が変数に格納されているのだからその変数を例えば assertThat(result, equalTo("リンゴ")); のように確認できたらいいなと思いました。
jimbe

2019/06/11 09:44

仰ることは分かりますが, スコープをご理解されていらっしゃるのでしたら, 基本的に不可能とお分かり頂かなくてはなりません. もし裏技的なことをご要望でしたら, ローカル変数に関まして過去に [Javaで、変数名取得し出力したい] ( https://teratail.com/questions/79495 ) というご質問もありましたので, 参考に如何でしょうか.
jin007

2019/06/12 00:39

他の方も同じことを考えている方は多いのですね。 やはり、スコープの関係上難しいということがはっきりとわかりました。 今回は技術的に難しいということで割り切ることができました。有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問