2011年9月20日火曜日

AndroidLibraryプロジェクトの作成とテスト(2)

 ちょっと間があいてしまいましたが前回の続きです。


 今回は実際にテストを作って実行する部分について紹介したいと思います。ではまずはテスト対象となるクラスをライブラリプロジェクトに作成したいと思います。



 ライブラリプロジェクトのパッケージ直下にクラスを作成するためにコンテキストメニューから「新規」-「クラス」を選択し以下の新規Javaクラスダイアログを表示します。


 クラス名はプロジェクトと同じ「AndroidLibrary」としました。他は今回なにも変更をしていません。



 作成されたクラスファイルにとりあえずコンストラクタメソッドのみ作成して続いてテストクラスを作成します。私はQuickJUnitを利用しているのでAndroidLibraryクラスに対するテストクラスが未作成状態ではCtrl+9で以下のようなダイアログが開きます。既にテストクラスが作成されている場合にはテストクラスがパースペクティブに表示されテスト対象クラスとテストクラスをショートカットで行き来することが出来ます。


 ここで「はい」と答えると新規JUnitテスト・ケースダイアログが表示されますのでテストクラスを生成させましょう。



 ソース・フォルダーがLibraryプロジェクトのsrcフォルダがデフォルトで指定されているのでLibraryテストプロジェクトのsrcフォルダに変更しておきます。またスーパークラスをAndroidTestCaseに変更してあります。



 作成したAndroidLibraryTestクラス内にとりあえず簡単なテストを作成しました。AndroidLibraryクラスのインスタンスを生成してそのインスタンスがAndroidLibraryクラスのものであるか確認しているだけです。コンストラクタメソッドは既に作成してあるのでテストファーストじゃありませんが今回は気にしません。



 また「新規作成」-「その他」から「Java」-「JUnit」-「Junitテスト・スイート」からAllTestsクラスを作成して配下のテストクラスを収集するよう実装しました。


 ここで一点注意が必要です。プロジェクトを作成したときに自動ビルドの設定になっている場合空プロジェクトがビルドされて既にapkファイルが作成されています。この状態でテストを実行するとエミュレータにLibraryプロジェクトのパッケージがインストールされてしまいテストが上手く実行出来なくなってしまいます。Libraryプロジェクトフォルダ内のbinフォルダは以下のようになっていることと思います。


 これら3つのファイルは必要ありませんのでテスト実行前に必ず削除しておくようにしてください。そうしないとエミュレータ起動ごとにAndroidライブラリパッケージがエミュレータにインストールされてしまいアンインストールしないとテスト実行が出来なくなってしまいます。もしインストールが実行されてしまった場合は.settingあたりを一度削除する必要があるかもしれませんがそこまでは検証していません。



 さて実際のテストの実行ですが「実行構成」を開き通常のAndroidテストと同じように設定を行います。ここは特に詳しい説明は必要ないことでしょう。


 そしてテストを実行するともちろんコンストラクタクラスが作られているのでグリーンです。


 いかがだったでしょうか。注意点はあるもののお手軽にライブラリプロジェクトのテストを行うことが出来ます。ライブラリなのでandroid.jarに依存しないものであれば普通のJavaプロジェクトとして作成したほうがテスト実行速度も速く優位だと思いますがどうしてもandroid.jarに依存してしまう場合にはこの手法でテストが可能となることと思います。


 さてさてこの手法を用いてライブラリを作成しなくちゃ!

2011年9月17日土曜日

AndroidLibraryプロジェクトの作成とテスト(1)

ADTの機能としてLibraryProjectの作成がある。たしか0.9.7あたりから追加されたものだったと思うが複数のアプリケーションから参照が可能なLibraryプロジェクトが作成可能となっています。


ライブラリであるので当然このLibraryプロジェクトはjarとしてbuildされ複数のAndroidプロジェクトで利用可能ということです。


しかもADTの機能としてLibraryプロジェクトをライブラリとして参照するとそのAndroidプロジェクトの中からもソースコードの添付等を経ずソースコードの参照可能となり使い勝手の面で大きなメリットがあるように思われます。


@ussy00さんのブログで春頃に紹介されていますが画像が無くなってしまっているようなのでATECの一員として後追い記事ではあるものの詳細をまとめてみようと思います。


ということで先ずはLibraryプロジェクトとLibraryテストプロジェクトの作成から行なってみたいと思います。




まずは新規作成より通常のAndroidプロジェクトの作成と同様に「Androidプロジェクト」を選択します。作成仮定としてはAndroidプロジェクトとほぼ同じですが一点だけ違うのはAcitivyを作成しないということです。


上記のようにプロジェクト名を付け内容の部分についてはそれぞれの環境にあわせて設定を行ってください。ビルド・ターゲットとしては今回はAPIレベル7を選択しました。



パッケージ名をを指定した下の部分でAndroidプロジェクトではアクティビティ名を入力してアクティビティクラスを自動生成させていると思いますが今回のライブラリではAcitivityは使わないという設定にしてチェックを外しています。「次へ」ボタンを押してテストプロジェクトも一緒に作成します。


こちらはデフォルトのままでOKです。変更する必要がある場合は随時行なってください。


私はQuickJUnitを使う関係でパッケージ名をAndroidプロジェクトと同じにするようにしています。このあたりも好みかと思いますので自由に設定しましょう。「完了」ボタンを押すと上記ではAndroidLibraryプロジェクトとAndroidLibraryTestプロジェクトの二つがパッケージエクスプローラに表示されるようになったかと思います。続いてそれぞれのパッケージについてLibraryプロジェクトとする設定を行います。


パッケージエクスプローラでAndroidLibraryプロジェクトを右クリックしてコンテキストメニューからプロパティを選択しその中のAndroid項目を開きます。


下の「ライブラリー」という中の「Is Library」にチェックを入れこのプロジェクトがLibraryプロジェクトであることを設定します。続いてAndroiManifest.xmlを開きます。


上記はAndroidManifest.xmlファイルのアプリケーションタブの一部です。上部にある「Define an <application> tag in the AndroidManifest.xml」のチェックが入っていると思うのでこれを外します。


するとAndroidManifest.xmlファイルは上記のようにとても簡単な物になります。


続いては必要のなresフォルダの中身を削除してしまいましょう。リソースを利用する場合は残しておいても構いませんが初期設定で置かれるiconやlayout/main.xmlやvalues/string.xmlは必要ないことが多いのではないかと思います。genフォルダ、assetsフォルダそしてresフォルダ自身は残しておかないとコンパイル時にエラーとなってしまうようです。


続いてはAndroidLibraryTestプロジェクトのプロパティを設定します。先程「Is Library」にチェックを入れた部分で「追加」ボタンを押しAndroidLibraryプロジェクトをライブラリとして登録します。



登録すると上記のように表示されライブラリとして追加されたことが表示されます。



またパッケージエクスプローラ上ではAndroidLibrary_srcとして参照されていることがわかるかと思います。この中身はAndroidLibraryプロジェクトのsrcフォルダがそのままリンクされているような感じで表示されています。こちらからファイルを変更してもAndroidLibraryプロジェクトの内容に反映してくれるようです。


ちょっと長くなってきてしまったのでとりあえずこのあたりでいったん〆め。
次の記事では実際にテストを実行するまでをご紹介します。