长时间运行时如何开始检查(从网络加载数据)

时间:2019-05-05 16:40:54

标签: android android-espresso ui-testing mockwebserver

Adnroid Studio 3.3。

在我的应用中,我使用Retrofit来执行http请求。 我也使用MockWebServer返回存根响应。

在活动中,当我单击按钮时,我启动 async http请求(通过Retrofit),然后等待回调方法以返回响应。这是Espresso的测试:

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

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

  @Test
fun buttonStart_click_longResponse() {
    // stub response
    mockServer.enqueue(MockResponse()
            .setResponseCode(200)
            .setBody(FileUtil.getStringFromFile(context, "add_trader_success_200.json"))
            .setBodyDelay(5000, TimeUnit.MILLISECONDS))

    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.id.containerProgressBarLayout))
            .check(matches(isDisplayed()))
}

但是问题是,当执行perform(click()时才调用方法check,直到未获得存根响应(5秒后)。

但是在check方法之后,我需要立即调用方法perform(click()。因为我需要checkcontainerProgressBarLayoutisDisplayed()而不返回存根响应。我需要加载数据

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用Espresso idling resources

  

空闲资源表示异步操作,其结果   影响UI测试中的后续操作。通过注册空闲   使用Espresso获得资源,您可以验证这些异步   在测试您的应用程序时,操作更加可靠。

还有一个Okhttp库,您可以检出here