调试构建类型的 Android 单元测试失败

标签 android unit-testing gradle

我的单元测试失败,android.util.Log 中的方法 d 未被模拟,但仅当我运行 testDebug 时才被模拟。 如果运行 testRelease 一切正常并且它们正确通过。 有谁知道为什么会这样? 从控制台和 Android Studio 运行 gradle 时会发生同样的事情。

最佳答案

这里解释一下我是如何解决这个问题的,以供将来引用。 测试在调试中工作但在发布时不工作的问题是由于 Log.d(以及来自 android 框架的 friend )没有被正确模拟。 它在构建为发布时工作的原因是我们的日志记录是基于构建配置中的这个属性的条件。基本上我们有 if (BuildConfig.type!="Release") Log.d (...) 并且由于编译器由于最终值而删除了此 block ,因此在测试发布时不会调用它。 为了模拟静态方法 Log.d,我使用了 PowerMock。模拟很容易,但设置 Power Mock 真的很麻烦,所以可能有更好的方法来做到这一点。

关于调试构建类型的 Android 单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657545/

相关文章:

android - 找不到与给定名称匹配的资源 'android:TextAppearance.Material.Inverse'

android - 使用 ACTION_VIEW Intent 调用 YouTube 应用大部分时间都失败

android - Dagger 中的多次注入(inject)

java - Powermock 无法模拟静态类

node.js - 找不到模块 : Error: Cannot resolve module 'react-addons-test-utils'

gradle - 在gradle中,子项目可以覆盖rootProject中定义的resolutionStrategy吗?

android - 在 Play 商店更新应用程序时,Flutter HiveDB 会丢失数据吗?

python - 如何检查元素是否在屏幕上完全可见?

gradle - Gradle任务tomcatRun成功,但Webapp抛出404错误

java - 如何在Eclipse中使用Gradle运行Cucumber + Spring Boot应用程序