Я бы хотел провести модульное тестирование, прочитав принадлежащий мне файл json, который находится в той же схеме, что и возврат API.Но, признаюсь, у меня нет ни малейшего представления, как начать.
Сценарий таков: когда приложение загрузило фрагмент через наблюдателя ViewModel, выполняет вызов API с модификацией.JSON ответа на этот вызов у меня есть в файле .json в "test / res /", в моем первом тесте я просто хотел бы проверить, равен ли возврат параметра "code" 200
Интерфейс службы
@GET("characters")
fun getCharacters(@Query("ts") ts: String,
@Query("apikey") apiKey: String,
@Query("hash") hash: String,
@Query("limit") limit : String = "80"): Call<ReturnData>
Модель
data class ReturnData(
val attributionHTML: String,
val attributionText: String,
val code: Int,
val copyright: String,
val `data`: Data,
val etag: String,
val status: String
)
class HomeViewModel(private val repository: MarvelRepository = MarvelRepositoryImpl(),
private val fragment: HomeFragment = HomeFragment.newInstance())
: ViewModel() {
fun getHeroes(){
//fragment.showLoading()
repository.getCharacter(object : OnGetMarvelCallback{
override fun onSuccess(response: ReturnData) {
Log.d("Reponse", "It's Ok!!!")
heroesList.value = response
//fragment.hideLoading()
}
override fun onError() {
Log.e("ErrorViewModel", "Error in viewmodel call")
//fragment.hideLoading()
}
})
}
}
class HomeViewModelTest {
@get:Rule
var rule: TestRule = InstantTaskExecutorRule()
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}
@Test
@Throws(Exception::class)
fun fileObjectShouldNotBeNull() {
//val file = getFileFromPath(this, "mock_response_error_404.json")
val file = readFileFromJson( "mock_response_error_404")
assertThat(file, notNullValue())
}
fun readFileFromJson(fileName: String): String{
val br = BufferedReader(InputStreamReader(FileInputStream(fileName)))
val sb = StringBuilder()
var line = br.readLine()
while (line != null){
sb.append(line)
line = br.readLine()
}
return sb.toString()
}
private fun getFileFromPath(obj: Any, fileName: String): File {
val classLoader = obj.javaClass.classLoader
val resource = classLoader!!.getResource(fileName)
return File(resource.path)
}
}
В дополнение к этим классам имеется хранилище, отвечающее за выполнение вызова службы MarvelAPI.Выполнение этих тестов приносит мне следующее исключение: java.io.FileNotFoundException: mock_response_error_404 (Нет такого файла или каталога).