Насмешливый ответ Джсона в модульном тесте - PullRequest
0 голосов
/ 09 апреля 2019

Я бы хотел провести модульное тестирование, прочитав принадлежащий мне файл 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 (Нет такого файла или каталога).

...