はじめに
AndroidでUIテストをするためには何を使うのが良いか調べて見たところ、
単一のアプリのUIテスト方法として EspressoがDeveloperGuideでも紹介されていたので、試してみました。
導入〜テスト作成まで
AndroidStudioで簡単なプログラムを作成して、それに対するUIテストを書いてみました。
が、面倒くさそう難しそうなので、書くのは大変そうですね...
いい方法がないか調べていると、DeveloperGuideにもこんなページが..
Espresso テスト レコーダーで UI テストを作成する
この方法が使えるならと..試しみました。。
SampleにAndroidStudioのプロジェクト作成で一発で作成できるLoginActivityを..

プロジェクトを作成して、Espressoを実行..

アプリが起動して、IDとパスワードを入力して、ボタンをタップしてみました。
すると、以下のキャプチャのように記録されます。
(マシン性能によりそうですが、実際は結構重く、入力もすんなりできませんでした..)

OKをタップするとテストクラスを出力できます。
コードはこんな風に出力されます。
テストクラスなので、実行できます。
@LargeTest
@RunWith(AndroidJUnit4::class)
class LoginActivityTest {
@Rule
@JvmField
var mActivityTestRule = ActivityTestRule(LoginActivity::class.java)
@Test
fun loginActivityTest() {
val appCompatEditText = onView(
allOf(
withId(R.id.username),
childAtPosition(
allOf(
withId(R.id.container),
childAtPosition(
withId(android.R.id.content),
0
)
),
0
),
isDisplayed()
)
)
appCompatEditText.perform(replaceText("test"), closeSoftKeyboard())
以下省略
「Add Assertion」ボタンを押せば、キャプチャのようにアサーションを追加できます。
(ダイアログもできるのですが、レイアウト位置が正しく設定されず手直しが必要です..)

まとめ
ものによっては手直しが必要ですし、ボイラーコードになりがちなのでメンテナンステストもかかりそうですが、
(UIテスト自体コストも高いし..)
UIテストはコストが高いからだけで今まで避けてきたので意外とハードルは高くないのかなと思いました。
ログインやエラーハンドリングのようなそのものはあまり変わらない部分であれば導入してみるのも良いかと思いました。