Вы можете использовать библиотеку MockWebServer от Square.
Создать resources
в исходном наборе тестов (src / test / resources) и вставить в него файл JSON, содержащийпример ответа от вашего API.Допустим, это выглядит так:
src / test / resources / sample_response.json
[
{
"id": "1",
"employee_name": "John Doe",
"employee_salary": "60000",
"employee_age": 37,
"profile_image": "https://dummy.sample-image.com/johndoe"
}
]
Затем вы можете написать свои тесты как:
class ApiTest {
private lateinit var server: MockWebServer
private lateinit var retrofit: Retrofit
private lateinit var service: TestApiService
@Before
fun setup() {
server = MockWebServer()
retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create(get<Moshi>()))
.addCallAdapterFactory(get<CoroutinesNetworkResponseAdapterFactory>())
.baseUrl(mockWebServer.url("/"))
.build()
service = retrofit.create(TestApi::class.java)
}
@After
fun teardown() {
server.close()
}
@Test
fun simpleTest() = runBlocking<Unit> {
val sampleResponse = this::class.java.getResource("/sample_response.json").readText()
server.enqueue(
MockResponse()
.setBody(sampleResponse)
)
val response = service.getPropertiesAsync().await()
assertTrue(1, response.size)
assertTrue(response[0].employee_name = "John Doe"
// Make as many assertions as you like
}
}
Вы должны спросить себя, что именно вы пытаетесь проверить?Нет необходимости тестировать функциональность Retrofit.Вам также не следует проверять функциональность других известных библиотек, таких как Moshi.
Эти тесты лучше всего служат для проверки правильности моделей данных, созданных вами для ответов API, и правильности вашего синтаксического анализатора (в данном случае,Moshi) может корректно обрабатывать неожиданные значения (например, ноль).Поэтому важно, чтобы выбранные вами примеры ответов были фактическими ответами вашего API, чтобы ваши модели данных могли быть проверены на соответствие реальным данным в тестах перед их использованием в приложении.