java.net.UnnknowService异常:网络安全策略不允许CLEARTEXT与t.main.wedeep.c



当我使用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"

相关内容

  • 没有找到相关文章