使用实际实现的单元测试 (类)

Unit testing using the real implementation (classes)

我想知道是否有办法避免嘲笑某些 类。我正在研究与通知相关的更大的单元测试。我 运行 遇到了多个问题,大部分我都能解决。

现在我被一些 类 困住了,比如 PendingIntentNotification.Builder 甚至可能 Notification。我正在使用 compat 库,所以我无法注入我的代码来模拟所有内容。我仍然不知道如何模拟构建器模式。

你能给我一个参考,我如何才能避免 Android Studio 在每次调用时注入 return null 的虚拟对象?我想将一些 类 列入白名单。我的意思是我知道有些 类 很容易被模仿,比如 IntentSharedPreferences

我找到了一个很棒的库,叫做 unmock,它完全可以满足我的需要。这是我的测试所需的示例配置:

unMock {
    // URI to download the android-all.jar from. e.g. https://oss.sonatype.org/content/groups/public/org/robolectric/android-all/
    downloadFrom 'https://oss.sonatype.org/content/groups/public/org/robolectric/android-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectric-0.jar'

    keep 'android.os.Bundle'
    keepStartingWith 'android.content.Intent'
    keepStartingWith 'android.content.ComponentName'
    keep 'android.app.Notification'
    keepStartingWith 'android.app.Notification$'
    keep 'android.net.Uri'
    keepStartingWith 'android.widget.RemoteViews'
    keep 'android.util.SparseIntArray'
    keep 'android.util.SparseArray'
    keep 'com.android.internal.util.ArrayUtils'
    keep 'com.android.internal.util.GrowingArrayUtils'
    keep 'libcore.util.EmptyArray'

    keepStartingWith "libcore."
    keepStartingWith "com.android.internal.R"
    keepStartingWith "com.android.internal.util."
    keepAndRename "java.nio.charset.Charsets" to "xjava.nio.charset.Charsets"
}

无法使用 PendingIntents,因为它需要一些本机实现,但是我可以模拟相关部分,这样我就可以对它们进行单元测试了。