我为我的Android应用编写了许多单元和检测测试。到目前为止,我只针对调试版本变体运行这些。是否有必要针对发布版本变体运行测试?有什么区别可能会给测试带来不同的结果?我能想到的主要是ProGuard启用时,我没有这样做。 ProGuard会做什么才能运行我的测试套件?我应该注意哪些其他问题需要测试发布版本变体?
答案 0 :(得分:1)
是否有必要针对发布版本变体运行测试?
我认为你应该。
可能会有什么不同,可能会给测试带来不同的结果?
几个例子:
您可能拥有使用BuildConfig
类字段的代码来启用/禁用某些工作流程。有些库也可能会使用它,尤其是BuildConfig.BUILD_TYPE
。做一些事情很常见:
if (BuildConfig.BUILD_TYPE.equals("debug") {
ACRA.init(...);
Stetho.init(...);
...
}
但由于尝试使用未正确初始化的组件/库,因此发布版本中的代码失败。
正如您所提到的,ProGuard可能会丢弃您的某些类,除非它已正确配置(例如,假设您忘记为某些第三方库添加规则)。针对发布变体运行测试可确保ProGuard配置正确。
ProGuard会怎样做才能运行我的测试套件?
ProGuard可能会删除通过反射加载的类/方法/字段,除非您向其添加@Keep
注释。它还可能重命名像Realm,Retrofit,Gson或Volley这样的库使用的类,导致所有单元和集成测试都通过调试版本(其中未启用ProGuard)但在发布版本上失败。在发送新的APK之前,您肯定想测试这些。
我应该注意哪些其他问题需要测试发布版本变体?
发布版本也可能应用PNG运算,通过Gradle中的buildConfigField
方法指定不同的参数,通过ABI或密度应用拆分或启用/禁用multidex等。所有这些都会影响您的应用程序的工作方式,所以为什么不安全并测试它们。
使用这些可以捕获的另一个常见问题是确保您不会意外地将代码放在错误的位置(例如/src/debug/java/
),这些位置恰好在调试版本中加载,而不是在其他版本中加载。