Espresso & Mapbox IdlingResource: нужен совет - PullRequest
0 голосов
/ 29 ноября 2018

Я ищу несколько советов, чтобы создать ресурс на холостом ходу, чтобы мои эспрессо-тесты ждали, когда карта не работает на холостом ходу.Во время тестов у нас было много движений камеры, масштабов и т. Д., Поэтому загружалось много тайлов, и старые устройства довольно требовательны.Поскольку наш бэкэнд иногда может быть медленным, некоторые из наших эспрессо-тестов не выполняются.

В нашем проекте используется mapbox 5.1.3 (на самом деле мы не можем его обновить), поэтому я основал свой подход на обратных вызовах addOnMapChangedListener, но, похоже, он не работает должным образом.Я все еще вижу, что эспрессо продолжает тесты, пока карта еще не готова ...

Итак, вот что я реализовал до сих пор для обработки загрузок карты / тайлов:

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()
    }
}

Не могли бы вы сказать мне, если подход правильный?Я что-то пропустил ?Спасибо за вашу помощь.

...