首页 >> 大全

GTS 中 testNumberOfHeadedApplications fa

2023-12-02 大全 17 作者:考证青年

GTS 中 测试-v7a s的时候会出现下面的异常,本文总结一下。

com....gts.t#

_GTS 中 testNumberOfHeadedApplications  fa_GTS 中 testNumberOfHeadedApplications  fa

对于第 1 个case,可以看GTS 中 fail 详解,本文主要总结第 2 个case。

先来看下出现异常的 host log:

07-30 23:30:11 I/ModuleListener: [16/20] com.google.android.placement.gts.PreloadHeadedAppsTest#testNumberOfHeadedApplications fail:
java.lang.AssertionError: Number of total preloaded apps exceeded: actual 9 > max 7at org.junit.Assert.fail(Assert.java:88)at org.junit.Assert.assertTrue(Assert.java:41)at com.google.android.placement.gts.PreloadHeadedAppsTest.assertAppCount(PreloadHeadedAppsTest.java:330)at com.google.android.placement.gts.PreloadHeadedAppsTest.assertRulePasses(PreloadHeadedAppsTest.java:325)at com.google.android.placement.gts.PreloadHeadedAppsTest.testNumberOfHeadedApplications(PreloadHeadedAppsTest.java:123)at java.lang.reflect.Method.invoke(Native Method)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:52)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:148)at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:142)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.lang.Thread.run(Thread.java:764)

来看下code:

    @Testpublic void testNumberOfHeadedApplications() throws Exception {// 获取所有的launch appsSet packageNames = getLaunchableApps();// 排除掉gms 的appsexemptWhitelistedGmsApps(packageNames);// 排除掉部分特殊categories 的appsexemptAppsByCategories(packageNames);// 排除特殊appsexemptAppsWithoutIntent(packageNames);Pair numApps = countUserAndSystemApps(packageNames);assertRulePasses(calculatePreloadRule(), ((Integer) numApps.first).intValue(), ((Integer) numApps.second).intValue());}

如上面注释,首先会获取所有 的apps,也就是 为 ...,详细看下面的code:

    private Set getLaunchableApps() throws Exception {Intent intent = new Intent("android.intent.action.MAIN");intent.addCategory("android.intent.category.LAUNCHER");List infos = this.mPackageManager.queryIntentActivities(intent, 0);Set packageNames = new HashSet();for (ResolveInfo r : infos) {packageNames.add(r.activityInfo.packageName);}packageNames.addAll(getLauncherLikeApps());this.mReportLog.addValues(KEY_LAUNCHABLE_APPS, Arrays.asList((String[]) packageNames.toArray(new String[packageNames.size()])), ResultType.NEUTRAL, ResultUnit.NONE);String str = TAG;StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("Launchable apps: ");stringBuilder.append(packageNames);Log.d(str, stringBuilder.toString());return packageNames;}

注意:

其中会有 这个变量,后面会讲解到,目前先理解为会将一些log 信息存放到一个文件中,这里 的app,会存在在key 为 下面。

接着上面code,获取 的apps 之后,会将一些特殊的apps 从list 中 掉,这些包括几个gms apps、特殊的的apps、特殊apps 。最终的 会经过函数ps() 计算出user apps 和 apps,这个计算函数是这个case 的关键了,如果计算出错,那么很容易出现本文说的这个case fail 现象。来看下code:

    private Pair countUserAndSystemApps(Set packageNames) {List user = new ArrayList();List system = new ArrayList();for (String name : packageNames) {if (PackageUtil.isSystemApp(name)) {system.add(name);} else {user.add(name);}}this.mReportLog.addValues(USER_APPS_KEY, user, ResultType.NEUTRAL, ResultUnit.NONE);String str = TAG;StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("User apps: ");stringBuilder.append(user);Log.d(str, stringBuilder.toString());this.mReportLog.addValues(SYSTEM_APPS_KEY, system, ResultType.NEUTRAL, ResultUnit.NONE);str = TAG;stringBuilder = new StringBuilder();stringBuilder.append("System apps: ");stringBuilder.append(system);Log.d(str, stringBuilder.toString());return new Pair(Integer.valueOf(user.size()), Integer.valueOf(system.size()));}

主要通过。() 来确认是否为 apps,并将这个log 保存在 中,key 分别是 和。

接着看code,在计算完成后会将计算的结果给:

Pair numApps = countUserAndSystemApps(packageNames);

然后开始进入:

assertRulePasses(calculatePreloadRule(), ((Integer) numApps.first).intValue(), ((Integer) numApps.second).intValue());

    private void assertRulePasses(PreloadRule rule, int numUser, int numSystem) throws Exception {if (rule.mShouldCountSystem) {assertAppCount(APP_COUNT_EXCEED_MSG, "system", numSystem, rule.mNumSystem);}assertAppCount(APP_COUNT_EXCEED_MSG, "total", numUser + numSystem, rule.numTotal());}

这个 为false 就出现了最开始的log,要求的是 + 必须要

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了