この記事の目的
この記事では、
Visual Studio Codeを使って、
単体テストを実行するところまでの手順をまとめること
と
リソースファイルを本番用・開発用で
分けて利用するための設定をまとめること
を目的としています。
本題
★Resourceファイルを作ろう
以下の図のように、[resources]フォルダを作成します。
作成した[resources]フォルダに[sample.properties]ファイルを作成します。
動作確認のため、以下のような内容を記述しました。
key001=value001 key002=value002 key003=value003 key004=value004
★Resource情報取得処理を実装しよう
作成したResourcesファイル(sample.properties)を呼び出し、
その中のkey3というキーに紐づく値を呼び出し元に返却するメソッドを実装します。
実装する対象のファイルはこれで、、、
実装する処理は以下の通りです。
//#region ResourceTest public String mainCore() { ResourceBundle bundle = ResourceBundle.getBundle("sample"); return bundle.getString("key003"); } //#endregion
このまま実装すると、以下のエラーが発生します。
java.util.MissingResourceException: Can't find bundle for base name sample
ということで、リソースファイルをクラスパスに設定します。
クラスパスに設定するときには、[build.gradle]ファイルに以下のコードを追加するのが便利です。
sourceSets { main { // クラスファイルと同じディレクトリへリソースファイルを出力する設定 output.resourcesDir = output.classesDir } }
上記コードを追加することで、クラスパスに以下の設定が追加されます。
上記設定が追加されたことを確認し、もう一度実行します。
デバッグコンソールにvalue003という内容が表示されれば成功です。
★番外編:JAVAでREGIONを使ってみよう
驚くことに、C#やVBでよく使われている【REGION】がJava@on visual studio Codeで利用できます。
Visual studio Codeでは*1、REGIONを使わなくてもメソッドやクラス単位で
内容の表示/非表示ができます。
以下の図では、
【←左】が内容の表示時の状態を表し、
【右→】が内容を非表示時にし、メソッド定義だけが表示されている状態を表しています。
このように、既に表示時/非表示機能があるので、メソッドが大量に定義されたクラスなどでも、目的のメソッドを素早く見つけることができるようになっています。
この機能だけでも十分便利ですが、【region】を利用することで、さらに便利にすることができます。
【region】を利用することで、開発者独自の「領域」を定義することができます。
つまり、メソッド、クラス、といった言語的に意味のある単位以外に、
開発者にとって意味のある単位で表示/非表示が可能な領域が作成できます。
以下の例は少し過剰に書きすぎたかもしれません( ゚Д゚)
【←左】は、regionを定義して、どれも非表示していない状態を示しています。
【真ん中】は、mainCore処理で、とても長い処理だけを非表示にした状態を表しています。
※長い処理=100ステップくらいを想定してください
【右→】は、メソッドのアクセス修飾子単位で分けた領域のすべてを非表示にした状態を表しています。
すべて展開したところだけを見ると、コメントが多くなって逆に見にくくなったという印象があります。
しかし、メソッドや処理が多くなってきたとき、これはとても役立ちます。
今後は積極的に利用していこうと思います。
※入力するときは、「#re」まで打つと、以下のようにインテリセンスが反応します。
このタイミングで「Tab」キーを押下することでregionを入力することができます*2。
★テスト用Resourceファイルを作ろう
以下の図のように、[resources]フォルダを作成します。
作成した[resources]フォルダに[sample.properties]ファイルを作成します。
動作確認のため、以下のような内容を記述しました。
key001=TESTvalue001 key002=TESTvalue002 key003=TESTvalue003 key004=TESTvalue004
★テスト用Resourceでテストしてみよう
クラスパスの設定は、既に完了しているので、テストメソッドだけ追加します。
テストメソッドを追加するファイルは以下の通りです。
追加する内容は以下の通りです。
@Test public void testAppHasAGreeting_Dummy() { App classUnderTest = new App(); assertEquals("TESTvalue003", classUnderTest.mainCore()); }
検証では、mainCoreメソッドの戻り値がTEST用リソースファイルの情報(”TEST”Value003)であることを確認します。
上記テストメソッドを実装し、テストを実行してみます。
想定した通り、TEST用のリソースファイルから情報を取得することができました。