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

时间:2011-11-23 14:27:00

标签: android unit-testing scala testing proguard

由于Android上的Scala问题,我最近需要在Android上推出ProGuard。我需要ProGuard的缩小功能,它可以删除假定未使用的类。我非常关注删除类对可测试性的影响。

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

通常情况下,我会对相对完整的单元测试覆盖率和不稳定的验收测试覆盖率感到满意。但是,鉴于在我的代码中我大量使用Guice依赖注入,到目前为止,我的经验是ProGuard以一种我难以预测的方式删除代码。因此,它很可能导致我引入错误。

这让我相信我需要编写完全覆盖的接受/平台测试,因为在任何时候都可能缺少课程。

其他人有这种经历吗?如果是这样,您的测试策略是什么?或者凭借经验,您是否更加确信ProGuard正在删除的课程真的不需要?

2 个答案:

答案 0 :(得分:2)

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

哦,我们也使用Guice:)

答案 1 :(得分:2)

ProGuard在尝试对已删除的类和/或模糊成员使用反射或Class#forName之前不会破坏您的应用程序。

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

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

总之 - 不要害怕。与ProGuard相关的问题很容易被发现。