スキップしてメイン コンテンツに移動

Android StudioでサクサクTDDできない!

まだ移行してなかった

2014年12月にAndroid Studio 1.0がリリースされて、年末にAndroid Studioへ移行しようと思ってましたが、EclipseのようにJUnitでサクサクテストするやり方がわからなかったので引き続きEclipseを使ってました。サクサクテストというのは、Run as > JUnit Test > Android JUnit Test Launcherで起動するJUnitテストです。


このテストのメリットはエミュレータ等のAndroid端末を介さないので一瞬で起動することです。一瞬で起動してくれるので、リズム良くテスト駆動開発が行えます。JUnit実践入門 で言うところの13章のモデル用にプロジェクトを作成してテストする話です。※1
Android固有のContext等を含むクラスのテストはできませんが、依存しないように作るのがメリットだったりします。

※1ここではJavaプロジェクトで作成するように掲載されてますが、Androidプロジェクトにモデルのコードを記述して、モデル用のAndroid Test Project(Run as > JUnit Test > Android JUnit Test Launcherしか実行しないプロジェクト)を作成する方がAPI的に良いと個人的には思います。

先日、技術系ブログを拝見してましたら、もうEclipseを使ってる人いないなどとサラっと書かれててショックを受け、DroidKaigiでもAndroid Studioが普通で、また我がアプリのバージョンアップも区切りがついたので、そろそろ現実と向き合おうと思います。

やりたいこと

  • テスト
    • JUnitでロジックのテスト
    • その他いろいろテスト(次回以降)
  • Eclipseとだいたい同じショートカット(次回以降)

その他Android Studioの特徴的な部分は追々調べながらやるとして、まずはテストですね。あと、gradle使っての自動テストとかも調べたいです。ショートカットも大事です。Eclipseでは使いやすいようカスタマイズしてたので、それに似た挙動をするようにカスタマイズしたいです。

環境

  • Android Studio:1.2
  • OS:Win7

JUnitでロジックのテスト

まずは、新規プロジェクトを作成。

モジュールのbuild.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.9.5'
}

テストケースをどこに書いたらいいの?

こちらの記事で紹介されてるサンプルによりますと、
/app/src/test/java/パッケージ名のディレクトリ/TestClassTest.java

となってますが、Android Studio的にどうやって作成するのか....

表示方法を変えれば良いという初歩的なことでした....
右クリックでディレクトリとパッケージを作成して、TestClassTest.javaを作成し、import org.junit.Test;と記述すると、Cannot resolve symbol 'junit'というエラー。これまた初歩的なことなんですが、メニュー > Build > Rebuild Projectで解決しました。Eclipseみたにサクッとビルドしたいのですが。

と思ったら、Rebuild Projectは大きな変更の時にと書いてありますね。
Difference between make and build in Android Studio - Stack Overflow
Compile All the source files in the specified scope are compiled. The scope in this case may be a file, a package, etc.
Make Project All the source files in the entire project that have been modified since the last compilation are compiled. Dependent source files, if appropriate, are also compiled. Additionally, the tasks tied to the compilation or make process on modified sources are performed. For example, EJB validation is performed if the corresponding option is enabled on the Validation page.
Make Module Compiled are all the source files that have been modified since the last compilation in the selected module as well as in all the modules it depends on recursively.
Rebuild Project All the source files in the project are recompiled. This may be necessary when the classpath entries have changed, for example, SDKs or libraries being used added, removed or altered

パッケージ名が思ってた感じではないですがとりあえずコードを。

JUnit実行

TestClassTest右クリック > Run > TestClassTest(下のアイコンのやつ) として実行


うーん、遅い....

ビルドが遅いのが原因かと、こちらを試してみました。
確かに多少速くなりましたが、Eclipseのとは根本的に別モノということでしょうか?
僕が求めてるのはこの↓速さというか、リズム感です。


でも、Intellij ideaの動画ではサクサクJUnitを実行しているのを見かけるのですが....
テスト駆動開発でModel部分を作成するときだけEclipseで開発して、テストが通ったらAndroid Studioへ持ってくる(テストコードも)のが良いのかなという結論になってしまいました。

コメント

このブログの人気の投稿

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

Eclipseで一通り基本的なGitを使ってみる

備忘録的にまとめておきたいと思います。おかしな点があればご指摘いただければ幸いです。 目次 環境 プロジェクト作成~初コミットまで コミットの履歴&差分を見る 元に戻す ブランチについて ブランチを作成してみる ブランチを統合するには マージする Rebaseする ローカルリポジトリからプロジェクトを取り込む コミットしたメッセージの修正 環境 Eclipse IDE for Java Developers:Juno Service Release 1 Git:上記Eclipseのプリインストール版