簡體   English   中英

無法在單元測試用例中讀取AndroidManifest.xml的元數據

[英]Unable to read the metadata of AndroidManifest.xml in unit test cases

我正在為我的android應用程序編寫本地單元測試用例。 在其中一個測試用例中,我需要讀取AndroidManifest.xml中定義的元數據的內容

我可以通過在運行應用程序時調用這些方法 - metadata.getString()/ metadata.getBoolean()來輕松讀取數據

我無法在單元測試中訪問相同的內容。 在maifest中定義的所有鍵的值在此處顯示為null。

在下面的代碼中, 正確創建了對象ai,res為null,aM為null,

元數據不為null,並且具有清單文件中定義的hub_url,enable_transmission和authentication的值。

奇怪的是,當我嘗試訪問變量a,b和c中的元數據內容時,所有都為空

    val context = ApplicationProvider.getApplicationContext<Context>()
    val ai = context!!.packageManager.getApplicationInfo( context.packageName, PackageManager.GET_META_DATA)
    val res = ai.metaData.getBoolean( context.getString(R.string.enable_transmission))

    val aM = ai.metaData.get( context.getString(R.string.enable_transmission))
    val metadata = ai.metaData!!;

    val a = metadata.getString(context.getString(R.string.hub_url))
    val b = metadata.get(context.getString(R.string.enable_transmission));
    val c = metadata.get(context.getString(R.string.authentication));

這是清單文件內容

 <application>

    <meta-data
        android:resource="@string/basic"
        android:name="@string/authentication"
        android:value="@string/basic" />

    <meta-data
        android:resource="@string/hub_url"
        android:name="@string/hub_url"
        android:value="@string/hub_url" />

    <meta-data
        android:resource="@bool/enable"
        android:name="@string/enable_transmission"
        android:value="@bool/enable" />


</application>

試試這段代碼,

val  context = applicationContext
val ai = context!!.packageManager.getApplicationInfo( context.packageName, PackageManager.GET_META_DATA)
val metadata = ai.metaData!!
val res = metadata.get( context.getString(R.string.enable_transmission))
val aM = metadata.get(context.getString(R.string.enable_transmission))

在manifest元數據標簽中僅使用android:value不使用android:resource而不是以對象直接轉換為特定格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM