Robolectricやってみた。

Androidテスト部 第二回ミーティングで、 Robolectric とかいう謎の物体の存在を教えてもらったのでやってみた。
@thorikawa さんありがたう!

Robolectric って?

http://pivotal.github.com/robolectric/index.html

簡単に言うと、PC上でAndroidの一部UnitTestで実行しちゃう!!ってことらしい。
appengineとかは、UnitTestをサーバとか起動する必要なくても簡単に実行できるので、TDD的な意味で開発サイクルでつっかえるところが少なく、非常に開発しやすいと思います!!

でも、Androidの場合はアプリのビルド、インストール、テストアプリのビルド、インストール、テストの実行、とサイクルを踏むためすんげー時間がかかります。1回テストをするのに、実機使って20秒、エミュレータの起動からやると分単位で時間かかって死ねばいいのに…ってなります。

ところが!ここでRobolectricを使うと、PC上でUnitTestが実行できるので、起動1秒テスト5秒!すてき!抱いて!!ってなります。
でも、あんまり過度な期待はしないほうがいいよ。

やってみる

http://pivotal.github.com/robolectric/eclipse-quick-start.html この通りやる。

  1. Project Creation
  2. Create a JAVA project for your tests
  3. Add required directory structure and jars to test project
  4. Create a test Run Configuration
  5. Verify your setup

と、書いてある通り上からやっていきます。
で、この時ダウンロードするjarに罠があって、最初 robolectric-0.9.2.jar を使ってたら、javasisstとかのライブラリが入ってなくてうまく動きませんでした。
robolectric-0.9.2-all.jar ここでこっち、all がついている方をダウンロードしておかないと涙目になります。

やってみたけど…

まだ、テスト1つ書いてみたとかそういうレベルなので、全然間違ってるかも。
間違ってたらごめんね、だけど…。

  • Instrumentほげふがみたいなのが無いっぽい気がする?Activityの操作とかは倒せないんじゃないの
  • テストの構文がAndroid本来のJUnitと違う記法になるから、普段はEclipseだけで実機もエミュレータもなしでテストして、1日一回、よし、エミュでテストするかー…!みたいなことは出来ない予感がする
  • Javadoc眺める限りでは、UI系の部品はShadow(差し替えようパーツ的な何か?)が用意されてるみたいなんですが、CursorとかContentProviderは用意されてないっぽい
  • ライフサイクルのどこどこまでなんか適当にやってあげちゃうぜー、ってんじゃなくて、全部自分でやらなきゃいけないらしい。onCreate自分で呼ぶとか

あんまし、導入してみよう!!って気持ちにはならない気もする…