在单元测试用例中无法读取AndroidManifest.xml的元数据

时间:2019-01-08 10:25:09

标签: android kotlin

我正在为我的android应用程序编写本地单元测试用例。 在其中一种测试用例中,我需要读取AndroidManifest.xml中定义的元数据的内容

我可以通过调用以下方法轻松地读取数据-metadata.getString()/ metadata.getBoolean() 在运行应用程序时

我无法在单元测试中访问相同的内容。 在清单中定义的所有键的值在此处似乎为空。

在下面的代码中,对象 ai已正确创建, res为空, aM为空,

元数据不为空,并且具有清单文件中定义的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>

1 个答案:

答案 0 :(得分:0)

尝试此代码,

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))

在清单元数据标记中,仅使用android:value而不使用android:resource而不是将对象直接转换为特定格式。