我正在编写一个单元测试来测试我的API调用,使用Retrofit2。我有一个可以在本地启动的服务器模拟(使用localhost:8080)
我总是收到一个403错误-禁止,但它的工作与邮差
@Config(sdk = [28])
@RunWith(RobolectricTestRunner::class)
class MockServerTest {
private lateinit var result: Response<CacheResult>
private lateinit var api: FakeAPI
@Before
fun setUp() {
api = CompanySingleton.retrofit.create(FakeAPI::class.java)
}
@Test
fun getResult() {
runBlocking {
result = api.cache()
assertThat(result.isSuccessful, equalTo(true))
}
}
}
object CompanySingleton {
private val okHttpClient: OkHttpClient = OkHttpClient.Builder()
.addInterceptor(Interceptor { chain ->
val original = chain.request()
val requestBuilder = original
.newBuilder()
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "OAuth test")
.addHeader("x-device-id", "test")
val request = requestBuilder.build()
chain.proceed(request)
}
).build()
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl("http://localhost:8080/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
在我的模拟器测试中,我输入http://10.0.2.2:8000来访问我的本地主机
我假设api是在您的笔记本电脑/pc上提供的(并且在它上面运行的邮递员肯定可以使用localhost到达它)。我认为你应该在android上使用笔记本电脑的本地IP(例如192.168.1.10)。另外,不要忘记在防火墙上打开8080端口(或者干脆关闭它)
当我必须测试一些本地服务时,我通常使用ngrok。运行起来很简单,只需在终端中输入:
./ngrok http 3000