当我使用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)
}
}
除了运行我的单元测试代码外,我的应用程序上一切都很顺利还有一个类似的问题,但我的问题与那个问题相比有点不同。我试过很多方法来解决类似的问题,但都没有成功。
PS:如果测试代码在Junit4Test上运行,但没有在AndroidJunit4TTest上运行,那么它可以正常工作。但现在我需要执行一个集成测试。所以这部分代码需要在AndroidJunit4Test 上执行
解决方案1(
将以下属性添加到AndroidManifest.xml中的<application
标记:
android:usesCleartextTraffic="true"
解决方案2(
将android:networkSecurityConfig="@xml/network_security_config"
添加到app/src/main/AndroidManifest.xml
:中的<application
标签
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">
在app/src/main/res/xml/
:中具有相应的network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
在我的案例中,我将其添加到android清单文件中:
android:usesCleartextTraffic="true"