首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用CountingIdlingResource进行异步操作时,检测测试失败

使用CountingIdlingResource进行异步操作时,检测测试失败
EN

Stack Overflow用户
提问于 2018-06-09 01:52:37
回答 1查看 215关注 0票数 2

在我的指令插入测试中,testZoomControls总是在CountingIdlingResource递减并导致map has not been initialized异常之前执行。

这怎么可能呢?

MapViewUiControlsTest.kt

代码语言:javascript
复制
@RunWith(AndroidJUnit4::class)
class MapViewUiControlsTest {

    private lateinit var mapView: MapView
    private lateinit var map: Map

    @Rule
    @JvmField
    val activityRule: ActivityTestRule<MapViewTestActivity> = ActivityTestRule(
        MapViewTestActivity::class.java
    )

    @Rule
    @JvmField
    val grantPermissionRule: GrantPermissionRule =
        GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION)

    private lateinit var idlingResource: CountingIdlingResource

    @Before
    @UiThreadTest
    fun init() {
        MockitoAnnotations.initMocks(this)

        idlingResource = activityRule.activity.idlingResource

        idlingResource.registerIdleTransitionCallback({
            map = activityRule.activity.map
            mapView = activityRule.activity.mapView
        })

        IdlingRegistry.getInstance().register(idlingResource)

        activityRule.activity.init()
    }

    @After
    @UiThreadTest
    fun cleanup() {
        IdlingRegistry.getInstance().unregister(idlingResource)
    }

    @Test
    @UiThreadTest
    fun testZoomControls() {
        map.getMapOptions().zoomControlsEnabled = true
        Assert.assertEquals(View.VISIBLE, mapView.zoomControlsView.visibility)
    }

}

MapViewTestActivity.kt

代码语言:javascript
复制
val idlingResource = CountingIdlingResource("dummy_resource", true)

fun init() {
    idlingResource.increment()
    mapView.getMapAsync(onMapReadyCallback = object : OnMapReadyCallback {
        override fun onMapReady(map: Map) {
            this@MapViewTestActivity.map = map
            idlingResource.decrement()
        }
    })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 04:39:59

您需要Espresso.onView(..).check(..)或类似的代码才能使此IdlingResource发挥作用。在这种情况下,Espresso将等待所有IdlingRsources空闲,然后继续下一行代码:

代码语言:javascript
复制
@Test
@UiThreadTest
fun testZoomControls() {
    //this will wait until your IdlingResource is idle
    Espresso.onView(<your map view matcher>).check(matches(isDisplayed()));

    map.getMapOptions().zoomControlsEnabled = true
    Assert.assertEquals(View.VISIBLE, mapView.zoomControlsView.visibility)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档