fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

JUnit4のEnclosedなクラスのテストが2回実行されてしまう件のイージーな回避方法

./gradlew testUnitTest --tests *Test

ちゃんとぐぐれば重複したクラスを除外するコードが出てくるので普通の人はそっちを試したほうがいいと思います。

2018/10/26 追記

Gradle4.7でこの現象が起きなくなったようです。

今どんな感じでアプリ開発を進めているかまとめてみる

仕事でAndroidアプリ開発をやって行く中で、自分のスタイルができつつあるので整理してみる。今作っているアプリによるところが大きいと思うので別のケースに対応できるかどうかはわからない。いろいろありそうなのでいくつかに分けてまとめることにする。続くかどうかはわからない。

作っているアプリのこと

  • SNSアプリ
  • phoneオンリー
  • 画像をダウンロードして表示する処理は無い
  • アナリティクス用のイベント取得や送信をする処理は無い
  • minimum sdk level: 19
  • ジャバ

最初の目標:Activityの状態と画面遷移のルールをActivityのViewModelに落とし込む

  • トップレベルメニューの画面をActivityにし、それ以外の画面はいずれかのActivityの中にさしこむFragmentとする
    • ActivityにToolbarとFragment用のコンテナになるViewGroupを持たせ、Activity内の画面遷移はタイトルの変更とFragmentの差し替えで実現する
  • Activityの状態をViewModelで管理する
    • Activity内で表示するFragmentやダイアログをActivityの状態と考える。便宜的に遷移中の状態を定義してもよいことにする
    • ViewModelの中でLiveDataに状態をsetして、Activityでobserveして状態に対応する画面を作る(FragmentManager.beginTransaction()やstartActivity()を呼ぶ)
  • 状態と遷移のルールを洗い出してViewModelのテストを書く
    • PlantUMLを使って状態遷移図を描いている
    • Repository(またはUseCase)はモックする
    • 状態ごとに内部クラスに分ける
    • TestRuleで初期化処理などを共通化しておくと便利

JetpackのNavigationでやってくれるようなことを自分で実装しているだけなのかもしれない。仕事のコードを乗せることはできないが、似たようなことを別の自分の趣味アプリでやって公開できれば説明しやすくなるだろうか。

RobolectricでDialogのOKとかCancelとかのボタンを押す

AlartDialogに付いてるOKとかCancelみたいなデフォルトのボタンを押したくなったので調べた。

dialog.findViewById(android.R.id.button1).performClick()

  • positive: android.R.id.button1
  • negative: android.R.id.button2
  • neutral: android.R.id.button3

:thinking_face:

要はidで探してclickするっていうことなのでEspressoでも同じような感じでできるんだろうか。もうちょっと気の利いたメソッドがありそう。