如何在测试中获取androidx.test.espresso.Root?

时间:2019-05-09 11:19:42

标签: android-espresso ui-testing

这是我的意式浓缩咖啡的测试:

@RunWith(AndroidJUnit4::class)
class AddTraderActivityTest {

    private lateinit var mockServer: MockWebServer

    private val TAG = AddTraderActivityTest::class.java.name

    // The IntentsTestRule class initializes Espresso Intents before each test, terminates the host activity, and releases Espresso Intents after each test
    @get:Rule
    var addTraderIntentTestRule: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)

    private val baseEditText = viewWithId(baseTextInputEditText)
    private val quoteEditText = viewWithId(quoteTextInputEditText)
    private val buttonStart = viewWithId(startButton)

    @Before
    fun setup() {
        mockServer = MockWebServer()
        mockServer.start(8081)
        Debug.d(TAG, "SUCCCESS_START_MOCKWEBSRVER")
    }

    @After
    @Throws
    fun tearDown() {
        // We're done with tests, shut it down
        mockServer.shutdown()
    }

@Test
    fun buttonStart_click_clientError_showToast() {
        //stub response
        mockServer.enqueue(MockResponse()
                .setResponseCode(400))

        baseEditText.type(BASE_TEST)
        quoteEditText.type(QUOTE_TEST)
        buttonStart.click()
        onView(withText(client_error)).inRoot(ToastMatcher())
                .check(matches(isDisplayed()))
        // Wait to hide toast. Else next test fail (because toast still not hide)
        Thread.sleep(LONG_DELAY_MILLS)
       // get Root here 
}

class ToastMatcher : TypeSafeMatcher<Root>() {

    override fun describeTo(description: Description) {
        description.appendText("is toast")
    }

    override fun matchesSafely(root: Root): Boolean {
        val type = root.getWindowLayoutParams().get().type
        if (type == WindowManager.LayoutParams.TYPE_TOAST) {
            val windowToken = root.getDecorView().getWindowToken()
            val appToken = root.getDecorView().getApplicationWindowToken()
            if (windowToken === appToken) {
                return true
            }
        }
        return false
    }
}

问题是: 如何在测试中(例如,在androidx.test.espresso.Root中获得testbuttonStart_click_clientError_showToast

0 个答案:

没有答案