使用ProGuard,对测试策略有什么影响?



我最近需要在Android上介绍ProGuard,因为Android上的Scala存在问题。我需要ProGuard的收缩功能,它可以删除假定未使用的类。我非常担心移除类对可测试性的影响。

目前,我编写在主机上运行的单元测试和在Android平台上运行完全集成的应用程序的验收测试。

通常,我对相对完整的单元测试覆盖率和零星的验收测试覆盖率感到满意。然而,考虑到我在代码中大量使用Guice依赖注入,到目前为止,根据我的经验,ProGuard以一种我很难预测的方式删除代码。因此,这很可能导致我引入错误。

这使我相信我需要编写实现完全覆盖的验收/平台测试,因为在任何时候,都可能有一个缺失的类。

其他人有这样的经历吗?如果有,你的测试策略是什么?或者随着经验的积累,你是否更加确信ProGuard正在删除的类确实是不需要的?

ProGuard将不会破坏您的应用程序,直到它试图在删除的类和/或混淆的成员上使用反射或class# forName。

根据我的经验(在Android上也有混淆的Scala),使用简单的烟雾测试很容易发现ProGuard对Android应用程序造成的问题。您知道项目中包含哪些库。如果其中一些使用反射或class# forName -对它们执行冒烟测试。然后从ProGuard配置中排除必要的类/成员。

还请记住,您可以使用ActivityInstrumentationTestCase2和模拟器自动测试您的混淆项目。如果您计划在您的项目中使用ProGuard,请始终在混淆的APK上执行仪表测试。

总之——不要害怕。与proguard相关的问题相对容易发现。

我们已经对ProGuard-ed应用程序进行单元测试和"全面"测试有一段时间了,我们还没有遇到"真正的"问题。我们遇到的唯一问题是,当我们在测试中使用一些没有在主应用程序中使用的库方法时;在这种情况下,ProGuard将从库中删除代码,我们将不得不手动添加特定的方法到proguard.cfg

哦,我们还使用Guice:)

相关内容

  • 没有找到相关文章

最新更新