728x90
response josn 값을 저장할 파일을 resources 폴더를 만들고 하위에 저장(newsresponse.json)
setUp()함수에서 mockWebServer생성하고 newAPIService는 일반 apiservice와 같다
package com.ej.android_cleanarchitecture_newsapiclient.data.api
import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.runBlocking
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import okio.buffer
import okio.source
import org.junit.After
import org.junit.Before
import org.junit.Test
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.nio.charset.Charset
import kotlin.text.Charsets.UTF_8
class NewsAPIServiceTest {
private lateinit var service:NewsAPIService
private lateinit var server : MockWebServer
@Before
fun setUp() {
server = MockWebServer()
service = Retrofit.Builder()
.baseUrl(server.url(""))
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(NewsAPIService::class.java)
}
@After
fun tearDown() {
server.shutdown()
}
private fun enqueueMockResponse(
fileName:String
){
val inputStream = javaClass.classLoader!!.getResourceAsStream(fileName)
val source = inputStream.source().buffer()
val mockResponse = MockResponse()
mockResponse.setBody(source.readString(Charsets.UTF_8))
server.enqueue(mockResponse)
}
@Test
fun getTopHeadlines_sentRequest_receivedExpected(){
return runBlocking {
enqueueMockResponse("newsresponse.json")
val responseBody = service.getTopHeadlines("us",1).body()
val request = server.takeRequest()
assertThat(responseBody).isNotNull()
assertThat(request.path).isEqualTo("/v2/top-headlines?country=us&page=1&apiKey=1c779f1ab3ef48e9ac337c1a320ce614")
}
}
@Test
fun getTopHeadlines_receivedResponse_correctPageSize(){
runBlocking {
enqueueMockResponse("newsresponse.json")
val responseBody = service.getTopHeadlines("us",1).body()
val articlesList = responseBody!!.articles
assertThat(articlesList.size).isEqualTo(20)
}
}
@Test
fun getTopHeadlines_receivedResponse_correctContent(){
runBlocking {
enqueueMockResponse("newsresponse.json")
val responseBody = service.getTopHeadlines("us",1).body()
val articlesList = responseBody!!.articles
val article = articlesList[0]
assertThat(article.author).isEqualTo("https://www.facebook.com/bbcnews")
assertThat(article.url).isEqualTo("https://www.bbc.com/news/world-middle-east-63939428")
}
}
}
NewsAPIService
package com.ej.android_cleanarchitecture_newsapiclient.data.api
import com.ej.android_cleanarchitecture_newsapiclient.BuildConfig
import com.ej.android_cleanarchitecture_newsapiclient.data.model.APIResponse
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Query
interface NewsAPIService {
@GET("v2/top-headlines")
suspend fun getTopHeadlines(
@Query("country")
contry:String,
@Query("page")
page:Int,
@Query("apiKey")
apiKey:String = BuildConfig.API_KEY
): Response<APIResponse>
}
728x90
'안드로이드 > UnitTest' 카테고리의 다른 글
안드로이드 livedata 테스트 (0) | 2022.12.11 |
---|---|
안드로이드 AndroidTest (room dao test) (0) | 2022.12.11 |
안드로이드 UnitTest Mock (0) | 2022.12.11 |
안드로이드 UnitTest (0) | 2022.12.11 |