我的单元测试失败,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/