Sample Instrumented Test for Retained Text After Screen Rotation // Android Kotlin Dev Diary

Written by

on

in

,

First I added the following UI Automator to my app:

androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'

So now my build.gradle (Module) file has the following dependecies:

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'net.objecthunter:exp4j:0.4.8'

    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'

}

Then under the package app/src/androidTest/java/net/catzie/samplecalculatorapp I added the following instrumented test class:

package net.catzie.samplecalculatorapp 

import android.support.test.uiautomator.UiDevice
import androidx.test.espresso.Espresso
import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import org.junit.Assert.*
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith


/**
 * Instrumented test, which will execute on an Android device.
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */

@RunWith(AndroidJUnit4::class)
class ValueRetainedInstrumentedTest {

    @get:Rule
    var activityRule: ActivityScenarioRule<MainActivity>
            = ActivityScenarioRule(MainActivity::class.java)

    @Test
    fun test_ui_value_after_screen_rotation() {
        Espresso.onView(ViewMatchers.withId(R.id.num_1)).perform(ViewActions.click())
        Espresso.onView(ViewMatchers.withId(R.id.num_period)).perform(ViewActions.click())
        Espresso.onView(ViewMatchers.withId(R.id.num_5)).perform(ViewActions.click())

        val device = UiDevice.getInstance(getInstrumentation())
        device.setOrientationLeft()

        val displayPanel: ViewInteraction = Espresso.onView(ViewMatchers.withId(R.id.display_panel))
        val displayPanelText = InstrumentedTestHelper.getText(displayPanel)
        assertEquals("1.5", displayPanelText)
    }
}

What it does is press the buttons 1, period, and 5 on the calculator’s UI to show “1.5” which should show up the display panel, rotate the screen of the emulator/device, and then check if the display panel is still showing the value “1.5”.

I use a ViewModel and LiveData to let the value survive configuration changes such as screen rotation.

Related Posts

About the author:

Catzie Avatar

The homo sapiens behind these blog posts is “Catzie“

Explore my top blog posts:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *