无法对 Android Google Places Autocomplete API 进行单元测试

问题描述

单元测试 Google Places Autocompete API 是不可能的,因为不支持创建假响应。尝试使用 val placeResponse = Task<FindAutocompletePredictionsResponse>. 创建虚假响应,不幸的是响应创建是 API 内部的。有没有办法(或解决方法)来实现这一点?

@Test
fun search_testSuccess()  {
    // AutoComplete response
    val placeResponse = Task<FindAutocompletePredictionsResponse>.
            
    val searchConstraints = SearchPlaceConstraints("Fake place")
    
    // AutoComplete request
    val request = FindAutocompletePredictionsRequest.builder()
            .setSessionToken(autocompleteSessionToken)
            .setQuery(searchConstraints.queryText)
            .build()
    
    // return provided placesResponse if `PlacesClient.findAutocompletePredictions()` is called
    coEvery { placesClient.findAutocompletePredictions(request) } returns placeResponse
    
    // Result of method being tested
    lateinit var result: Result<PlaceData<List<AutocompletePrediction>>>
    coJustRun { result = googlePlaceSearchRemoteDataSource.search(searchConstraints)}
    
    // Verify PlaceClient has been called 
    coVerify(exactly = 1) { placesClient.findAutocompletePredictions(request) }

    // Assert success
    assert(result is Result.Success)
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)