【发布时间】:2020-07-22 10:20:00
【问题描述】:
当我使用mockhttpserver测试http请求时出现上述错误,下面的代码是我如何创建服务的。
fun <T> getService(clazz: Class<T>): T {
val client = OkHttpClient.Builder().addInterceptor(HeaderInterceptor()).addInterceptor(HttpLoggingInterceptor().apply { level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE })
.build()
return Retrofit.Builder()
.baseUrl(mockWebServer.url(""))
.client(client)
.addConverterFactory(GsonConverterFactory.create(GSON))
.build()
.create(clazz)
}
这是我的测试代码。
@UninstallModules(HomePageDataModule::class)
@HiltAndroidTest
class TestHomePageViewModel {
private lateinit var viewModel: HomePageViewModel
@get:Rule
var hiltRule = HiltAndroidRule(this)
@Inject
lateinit var cpd: CompositionDao
@Inject
lateinit var csd: CompositionsDao
@Inject
lateinit var hpds: HomePageDataSource
@Inject
lateinit var ss :HomePageService
@Before
fun init() {
hiltRule.inject()
viewModel = HomePageViewModel(HomeCompositionsRepository(cpd, csd, hpds, Util.GSON))
}
@Test
fun testObserveHomeData() {
val data = Util.getFileString("mainpage.json")
val rr = GSON.fromJson(data,Array<HomePreviewView>::class.java)
println(rr)
enqueueResponse("mainpage.json")
runBlocking {
val result = ss.getHomeData()
Assert.assertNotEquals(rr.size,result.body()!!.size)
}
}
除了运行我的单元测试代码之外,我的应用程序一切正常。 有一个类似的 problem ,但我的问题与那个有一点不同。 我尝试过类似问题的很多方法,但都不起作用。
PS:如果测试代码在 Junit4Test 而不是 AndroidJunit4Test 上运行,它可以正常工作。但现在我需要执行集成测试。所以这部分代码需要在AndroidJunit4Test上执行
【问题讨论】:
-
确保您的主机对您的应用程序来说是安全的,或者您可以在清单文件中添加这行代码。 android:usesCleartextTraffic="true"
-
@AslamHossin 我不知道为什么当我执行上面的单元测试代码时它对我不起作用。
-
@Cyrus 当该属性设置为“false”时,平台组件(例如,HTTP 和 FTP 堆栈、DownloadManager 和 MediaPlayer)将拒绝应用程序使用明文流量的请求。强烈建议第三方库也遵守此设置。避免明文流量的关键原因是缺乏机密性、真实性和防篡改保护;网络攻击者可以窃听传输的数据并在不被发现的情况下对其进行修改。更多developer.android.com/guide/topics/manifest/…
-
您也可以使用 mockWebServer.useTls 和 client.insecureHost 来使用 SSL 进行测试连接。
标签: android okhttp android-9.0-pie download-manager