初めに
UIテストは書いたことがなかったので、右も左もわからない状態です
とりあえず、動いたので記事に書いてみます
Activityの起動
テストを書き始めようとしましたが、Activityの起動方法がわからない…
アプリが起動して自動でUIを操作してテストしてくれる というイメージでしたが、画面に何も表示されずテストが停止していました。
Activityを起動するにはandroidTestと書かれているフォルダ内を見て、
@RunWith(AndroidJUnit4::class)
class FeatureTest {
val mActivityRule = ActivityScenarioRule(MainActivity::class.java)
@Rule get
}
とテストを実行するクラス内に記述しました
これを書くことで各テストの関数実行時にActivityを起動してくれるようになりました
Baristaを導入
素のEspressoではテストコードの記述が面倒なようなので、楽に記述できるBaristaというライブラリを導入しました
build.gradleに以下dependenciesを追記
dependencies {
androidTestImplementation('com.adevinta.android:barista:4.2.0') {
exclude group: 'org.jetbrains.kotlin'
}
}
これで特定のViewをクリックしたいとき、
clickOn(R.id.button)
のようにIDを指定して簡単にクリック操作を記述できます
Baristaのリポジトリ:
テスト関数を書く
実際にUIの操作などを書いていきます
麻雀の点数計算をするアプリを作っていたので、SpinnerやSwitch、ボタンのクリック操作を記述。
assertDisplayedでTextViewに表示される文字列をチェックしています
@RunWith(AndroidJUnit4::class)
class FeatureTest {
val mActivityRule = ActivityScenarioRule(MainActivity::class.java)
@Rule get
@Test
fun show_tsumo_child_3fann30fu_result(){
clickRadioButtonItem(R.id.calculateSwtichGroup, R.id.tsumoSwitch) // Switchをクリック
clickSpinnerItem(R.id.fannSpinner, 2) // Spinnerで0から数えて2番目のアイテムをクリック
clickSpinnerItem(R.id.fuSpinner, 2)
clickOn(R.id.resultButton) // 指定のボタンをクリック
assertDisplayed(R.id.resultText, "1000 - 2000") // TextViewに表示される文字列をチェック
}
}
こうすることでテスト実行時にアプリが起動し、自動で操作を行い結果をテストできました
ただ、R.idでidを指定する際にUnresolved referenceが出ており、補完などもできませんでした、なぜ…?
終わり
Espressoはほぼ書いたことがないため、この書き方であっているか自信がありません
ActivityScenarioRuleでいろいろできそうですが、どう使うかはまだピンときていません
とりあえず動いたので、使いながら確認していきます…