LoginSignup
4
4

More than 5 years have passed since last update.

ScalaとAndroidとUnitテスト

Last updated at Posted at 2014-03-12

前回はとりあえずScalaでAndroid開発が出来そう!ってところで終わりました。

でも開発するにはあれですよね、(Developer)Testがやりやすいというのも重要ですよね

ってことでとりあえずやってみた結果がこちら

Android特有のテストに関して

src下の instrumentTest に配置することで、sbt android:testで動かせます

Ant Styleの場合はsrcと並列に tests ディレクトリを作成して同様にやればOKです

フツーならtest側にもAndroidManifest.xmlが必要ですが、android-sdk-pluginが適当に補完してくれるので特に配置する必要は無いです

もちろん配置してもOKです

android:debug-includes-tests を false にすると自分でどうにかしないとダメなのかな?

これでscalaでめでたくテストが…

とは言うものの、

class SimpleLogicTest extends TestCase {

  def testAddOne(): Unit = {
    assertEquals(2, SimpleLogic.addOne(1))
  }
}

みたいなのを書いても、なんかそんなに嬉しくないですね…

ただでさえ、Emulatorやら実機やらにテスト用のapk差し込む時間があるのに…

出力はこんなの

JUnit

さてどれがテスト結果でしょう

みたいな。

そういやこんなのだったっけ??

specs2とかを使ってAndroidとは関係のない部分をテストする

普段Scala等に飼い慣らされていると、フツーの、しかもJUnit3ベースのテストケース書いても「なんだかなぁ…」という気持ちでイッパイになるかと思います

かと言って、なんにも考えずに

libraryDependencies ++= Seq(
  "org.specs2" %% "specs2" % "2.3.10" % "test"
)

みたいな感じで依存関係追加しても解決しません(´・ω・`)ショボーン

拙い英語力で読むと libraryDependencies in test に期待してても依存性に追加しねーから。どうしても使いたければ普通に追加しろよ!(要は"2.3.10" % "test" のtestを除去すれば良い)

だってprogurdでどうせ使わないやつは除外されるしいいでしょ?

みたいな感じでしょうか。

テスト用に普通のProjectを作る

というわけでTestだけをするためにフツーのSBTプロジェクト作ってそいつがAndroidのプロジェクトに対してTestすりゃいいんじゃね??

ということでやったのが今日のやつです

結果

sbt testProject/test

とか叩けば、なんと!Android動いてなくてもOK!

出力結果はこちら

Specs2

これでAndroidに依存しない部分はガシガシ動作確認出来ますね!

Androidに依存する部分もspecs2とか使いたい…けど

使いたいですがどうすれば良いんでしょ。

readmeの後半 に "Unit testing with robolectric, see my build.scala for this configuration:" みたいな感じで書かれているんですけど

その直後に、「でもこれもう1年近く触ってねーから」とか書いてあったりして、ちょっとよくわかんないですね。

あとRobolectricSuite.scalaなるものへのリンクも貼ってあるのですが…

なのでrobolectricと合わせて上手に使える方法が見つかれば大変ハッピーになれそうな予感だけはしています

ので、だれかご教授お願い致します…

感想

  • テストコードが分散してしまう
  • 挙句Androidに依存する部分は結局Junitベース
  • それ以前になんかもっとある程度ちゃんとしたアプリの状態で試したほうがよいのでは…

とか色々あるけど

という個人的なダメな思いもあるのでいいや

そうそう、android-pluginを使ったg8のテンプレートだと、これと逆な作りになってましたよ

android-pluginとandroid-sdk-pluginどっちを使うのが良いのだろう…
→ コメント頂いている通り、現状後者のほうは結構マメにupdateされています

とは言うものAndroidに多少は依存した部分もどうにかしたい

2014/05/10 追記

基本は依存する部分、しない部分を出来る限り分けたいですが、
それでも限度ありますよね。

ましてや依存する部分でも「ほぼ単なるロジックなんだよねこれ…」とかもあるかと

もちろんActivityとかに対するテストも含めてきちんとrobolectric対応とかすればよいのですが、
とりあえず下記を試す価値があるかもしれません。

libraryDependencies ++= Seq(
  "org.specs2" %% "specs2" % "2.3.10" % "test",
  "org.robolectric" % "android-all" % "4.4_r1-robolectric-0"
)

あまり深く考えずに足してみたら割とうまいこと動いたので個人の備忘までに

上にも書いてますが、そのうち…そのうちちゃんとrobolectric対応を調べる…

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4