Espresso和Mapbox IdlingResource:需要建议

时间:2018-11-29 15:32:09

标签: automated-tests android-espresso mapbox-android

我正在寻找一些建议,以创建一个空闲资源,以使我的意式浓缩咖啡测试在地图未空闲时等待。 在测试过程中,我们会进行很多摄像机的移动,变焦等操作,因此下载了很多图块,并且还非常喜欢旧设备。由于有时后端可能很慢,因此我们的某些浓缩咖啡测试失败了。

我们的项目正在使用mapbox 5.1.3(实际上无法升级),因此我的方法基于addOnMapChangedListener回调,但似乎无法正常工作。我仍然可以看到espresso正在继续测试,而地图尚未准备好...

所以,这是我到目前为止为处理地图/拼贴加载而实现的内容:

class MapboxIdlingResource(mapview: MapView) : IdlingResource {
    private var mapbox: MapboxMap? = null
    private var resourceCallback: IdlingResource.ResourceCallback? = null
    private var isIdle = true
    init {
        mapview.getMapAsync { mapboxMap ->
            this.mapbox = mapboxMap
            mapview.addOnMapChangedListener { change ->
                when (change) {
                    MapView.DID_FAIL_LOADING_MAP,
                    MapView.DID_FINISH_LOADING_MAP,
                    MapView.DID_FINISH_LOADING_STYLE,
                    MapView.DID_FINISH_RENDERING_FRAME,
                    MapView.DID_FINISH_RENDERING_FRAME_FULLY_RENDERED,
                    MapView.DID_FINISH_RENDERING_MAP,
                    MapView.DID_FINISH_RENDERING_MAP_FULLY_RENDERED,
                    MapView.SOURCE_DID_CHANGE,
                    MapView.REGION_DID_CHANGE,
                    MapView.REGION_DID_CHANGE_ANIMATED -> setIdle()

                    MapView.REGION_IS_CHANGING,
                    MapView.REGION_WILL_CHANGE,
                    MapView.REGION_WILL_CHANGE_ANIMATED,
                    MapView.WILL_START_LOADING_MAP,
                    MapView.WILL_START_RENDERING_FRAME,
                    MapView.WILL_START_RENDERING_MAP -> waitForSomething()
                }
            }
        }
    }

    override fun getName(): String {
        return javaClass.simpleName
    }

    override fun isIdleNow(): Boolean {
        return isIdle
    }

    override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
        this.resourceCallback = resourceCallback
    }

    private fun waitForSomething(mapEvent: Int) {
        isIdle = false
    }

    private fun setIdle(mapEvent: Int) {
        isIdle = true
        resourceCallback?.onTransitionToIdle()
    }
}

您能告诉我这种方法是否正确吗?我想念什么吗? 谢谢您的帮助。

0 个答案:

没有答案