package com.example.myapplication
import okhttp3.OkHttpClient
import okhttp3.RequestBody
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import java.util.concurrent.TimeUnit
interface UploadFileService {
@POST("/abc/def")
suspend fun uploadFile(
@Body body: RequestBody
): String
@GET("/abc/a01/{user}")
suspend fun a01(
@Path("user") user:String): String
companion object {
private val client by lazy {
OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build()
}
private const val BASE_URL = "https://api.abc.cn/"
private val retrofit : Retrofit by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()}
val instance: UploadFileService by lazy {
retrofit.create(UploadFileService::class.java)
}
}
}
package com.example.myapplication
import com.google.gson.GsonBuilder
import kotlinx.coroutines.test.runTest
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.io.IOException
class UploadFileServiceTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
private lateinit var mockWebServer: MockWebServer ;
private lateinit var uploadFileService: UploadFileService
@Before
@Throws(IOException::class)
fun setup() {
mockWebServer = MockWebServer()
mockWebServer.start()
val gson = GsonBuilder()
.setLenient()
.create()
val retrofit = Retrofit.Builder()
.baseUrl(mockWebServer.url("/"))
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
uploadFileService = retrofit.create(UploadFileService::class.java)
}
@After
@Throws(IOException::class)
fun tearDown() {
mockWebServer.shutdown()
}
@Test
fun testA01_success() = runTest {
val mockResponse = "123"
mockWebServer.enqueue(
MockResponse()
.setResponseCode(200)
.setBody(mockResponse))
val result = uploadFileService.a01("haha");
assertEquals(mockResponse, result)
}
}