android - 运行改造 api 单元测试时出现 IllegalArgumentException
问题描述
尝试运行单元测试时出现以下 IllegalArgumentException:
java.lang.IllegalArgumentException: in == null
at okio.Okio.source(Okio.java:128)
at okio.Okio.source(Okio.java:124)
at com.example.SearchApiTest.enqueueResponse(SearchApiTest.kt:57)
at com.example.SearchApiTest.enqueueResponse$default(SearchApiTest.kt:54)
at com.example.SearchApiTest.searchLocations(SearchApiTest.kt:48)
该错误消息似乎表明该错误正在发生在该行上:
val source = Okio.buffer(Okio.source(inputStream))
这是我下面的单元测试:
@RunWith(JUnit4::class)
class SearchApiTest {
@Rule
@JvmField
val instantExecutorRule = InstantTaskExecutorRule()
private lateinit var api: SearchApi
private lateinit var mockWebServer: MockWebServer
@Before
fun createService() {
mockWebServer = MockWebServer()
api = Retrofit.Builder()
.baseUrl(mockWebServer.url("/"))
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(LiveDataCallAdapterFactory())
.build()
.create(SearchApi::class.java)
}
@After
fun stopService() {
mockWebServer.shutdown()
}
@Test
fun searchLocations() {
enqueueResponse("searchLocations.json")
val value = getValue(api.searchLocations("usa"))
val locations = (value as ApiSuccessResponse).body
assertThat(locations.totalResults, `is`(20))
}
private fun enqueueResponse(fileName: String, headers: Map<String, String> = emptyMap()) {
val inputStream = javaClass.classLoader
.getResourceAsStream("api-response/$fileName")
val source = Okio.buffer(Okio.source(inputStream))
val mockResponse = MockResponse()
for ((key, value) in headers) {
mockResponse.addHeader(key, value)
}
mockWebServer.enqueue(
mockResponse
.setBody(source.readString(Charsets.UTF_8))
)
}
}
解决方案
推荐阅读
- c - c struct数组的动态分配
- mysql - jOOQ中派生表的相关性
- c# - 在 c# 中使用 ffmpeg 时遇到问题如何正确格式化字符串以升级视频?
- elixir - 如何在不等待前一个在 GenServer Elixir 中完成的情况下每秒发出请求
- android - 如何在 CDATA android 中一起写 & 和 \n?
- postgresql - AWS - 使用 aws_s3 扩展(由 RDS 提供)导入 S3 到 RDS(postgres)失败
- python - 尝试从缓存数据中下载 matplotlib 模块,但无法正常工作
- c++ - 如何使用类模板特化避免代码重复
- linux - 使用 tr 的 bash 脚本的奇怪行为
- python - 在fuzzywuzzy中使用Process.extract以及给定查询和选择的所有最大相似选择