【问题标题】:Is it possilble to finish test only after Toast was hide? [duplicate]是否只有在 Toast 隐藏后才能完成测试? [复制]
【发布时间】:2019-05-02 12:38:57
【问题描述】:

这里是我的 Espresso 测试:

@RunWith(AndroidJUnit4::class)
class AddTraderActivityNetworkTest {
    @Rule
    @JvmField
    var addTraderIntentTestRule: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)

    @Before
    fun setup() {
        mockServer = MockWebServer()
        mockServer.start(8081)
    }

 @Test
    fun buttonStart_click_serverError_showToast() {
        mockServer.enqueue(MockResponse()
                .setResponseCode(500))

        onView(withId(R.id.baseTextInputEditText))
                .perform(typeText(BASE_TEST))
        onView(withId(R.id.quoteTextInputEditText))
                .perform(typeText(QUOTE_TEST))
        onView(withId(R.id.startButton))
                .perform(click())
        onView(withText(R.string.server_error)).inRoot(ToastMatcher())
                .check(matches(isDisplayed()))
    }

测试buttonStart_click_serverError_showToast 成功通过。当我收到网络服务器错误时,它(测试)检查显示 Toast。不错。

但问题是测试在 Toast 被隐藏之前完成。 但是只有在buttonStart_click_serverError_showToast 的吐司被隐藏之后,我才需要开始另一个测试。 我该怎么做?

这是我的解决方案:

@RunWith(AndroidJUnit4::class)
class AddTraderActivityNetworkTest {
    private val context = InstrumentationRegistry.getInstrumentation().getContext()
    private lateinit var mockServer: MockWebServer

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

    @Rule
    @JvmField
    var addTraderIntentTestRule: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)

    @Before
    fun setup() {
        mockServer = MockWebServer()
        mockServer.start(8081)
     }

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

        onView(withId(R.id.baseTextInputEditText))
                .perform(typeText(BASE_TEST))
        onView(withId(R.id.quoteTextInputEditText))
                .perform(typeText(QUOTE_TEST))
        onView(withId(R.id.startButton))
                .perform(click())
        onView(withText(R.string.client_error)).inRoot(ToastMatcher())
                .check(matches(isDisplayed()))
         Thread.sleep(ToastUtil.LONG_DELAY_MILLS)
    }     


class ToastUtil {
    companion object {
        const val LONG_DELAY_MILLS= 3500L
        const val SHORT_DELAY_MILLS = 2000L
    }
}

我使用 3500 Mills 的 sleep

【问题讨论】:

    标签: android android-espresso ui-testing


    【解决方案1】:

    在测试结束时添加 sleep 命令,以便浏览器有时间在完成测试之前处理 hide()。三秒钟应该可以工作。

     @Test
        fun buttonStart_click_serverError_showToast() {
            Thread.sleep(ToastUtil.LONG_DELAY)
            // stub response
            mockServer.enqueue(MockResponse()
                    .setResponseCode(500))
        onView(withId(R.id.baseTextInputEditText))
                .perform(typeText(BASE_TEST))
        onView(withId(R.id.quoteTextInputEditText))
                .perform(typeText(QUOTE_TEST))
        onView(withId(R.id.startButton))
                .perform(click())
        onView(withText(R.string.server_error)).inRoot(ToastMatcher())
                .check(matches(isDisplayed()))
    Thread.sleep(3000)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2022-01-25
      • 2018-12-07
      • 1970-01-01
      • 2022-06-15
      相关资源
      最近更新 更多