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

3
我在思考是否有办法避免模拟一些类。我正在处理与通知相关的大型单元测试。我遇到了多个问题,但基本上都解决了。
现在我卡在了一些类上,例如PendingIntentNotification.Builder,甚至可能是Notification。我正在使用兼容库,因此无法将我的代码注入以模拟所有内容。我仍然不知道如何模拟构建器模式。
你可以给我一个参考吗?如何避免Android Studio注入返回每次调用都为空的虚拟对象?我想要白名单一些类。我知道一些类很容易模拟,例如IntentSharedPreferences

@Spy 正是这样做的。但我不确定这是否正是您要寻找的。您能否提供一个示例类,您想要测试哪些字段以运行具体实现。 - Magnilex
1个回答

2

我发现了一个很棒的库,叫做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"
}

PendingIntent无法使用,因为它需要一些本地实现,但我可以模拟相关部分,以便进行单元测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接