- テストコードを書いているとき、勘違いがあったのでmemo
- 結論:今回やりたかったことは基本的にできない
- 調べている時、ローカル変数とフィールドを混同していることに気づいた
やりたかったこと
- ユニットテスト
- テスト対象クラスのメソッド中の変数(ローカル変数)の値をテストコードから参照
- 下記コードを例にしたとき、
str1
とstr2
をテストで参照して確認したい
public class ReturnString {
public void printStr(){
String str1 = "Hello ";
String str2 = "Java!";
System.out.println(str1 + str2);
}
}
混同していたフィールドとローカル変数
-
ローカル変数
- 上の例での
str1
、str2
- メソッド内で定義されている変数
- 外部からは参照できない
- 上の例での
-
フィールド
- クラス内で定義されている変数
- メソッド内ではない
- publicであれば外部からも参照可能
- privateでも参照手段あり
- privateなフィールドの参照方法→【Java】privateなフィールドをテスト
こういったコードであれば参照できた
- 下記は
str1
、str2
をフィールドで定義しているので、参照可能 - ただし、不用意にスコープの広い変数を使用するのは良くない
- 下記コード例は非推奨
- ローカル変数にするべき
- 少なくとも
private
で定義するべき
public class ReturnString {
public String str1 = "Hello ";
public String str2 = "Java!";
public void printStr(){
System.out.println(str1 + str2);
}
}
結論
- スコープ(変数が有効な範囲)が違うためできない
- ローカル変数のスコープ→メソッドの中のみ
- フィールドはFieldクラスなど、色々な方法で参照できる
- 調べていた時、「java test メソッドの中」のような検索ワードだとフィールドの情報にヒットして、混同してしまっていた
- ローカル変数について失念していた僕が悪いです(^_^;)
- けど、同じように迷ってしまう人ももしかしたらいるかもなので、メモとして残しました
コメント