【发布时间】:2017-07-01 19:27:49
【问题描述】:
我喜欢 Idea / Android-Studio 中的 Kotlin REPL - 但作为一名 Android 开发人员,我经常遇到 Stub!这里的问题。在编写单元测试时,我使用unmock 来解决这个问题。有没有办法使用与 Kotlin REPL 插件相同的方法?
[
【问题讨论】:
标签: android android-studio intellij-idea kotlin read-eval-print-loop
我喜欢 Idea / Android-Studio 中的 Kotlin REPL - 但作为一名 Android 开发人员,我经常遇到 Stub!这里的问题。在编写单元测试时,我使用unmock 来解决这个问题。有没有办法使用与 Kotlin REPL 插件相同的方法?
[
【问题讨论】:
标签: android android-studio intellij-idea kotlin read-eval-print-loop
所有 android(和 java.lang.*)类都是 Android 项目中的占位符。这是因为android没有使用标准的java类文件来存储编译后的代码,没有办法直接在电脑上运行这段代码。
您根本无法将 REPL 与 android 类一起使用,它们只会存在于实际设备或模拟器上。
如果您不关心正确性,则可以通过将 Robolectric 的 Android 实现添加为项目的依赖项来使用它。 为确保它不会与实际实现发生冲突,您可能应该使用专用于 REPL 的单独模块来执行此操作。
unmock使用的Robolectic的依赖是:org.robolectric:android-all:7.1.0_r7-robolectric-0
【讨论】:
问题在于 IDEA 中的 Kotlin REPL 是由 Kotlin IDEA 插件提供的,该插件本身没有 Android 的概念,但只查看类路径中的内容,在本例中是包含存根的 android.jar抛出你提到的异常。
使用 unmock 甚至集成的 Android 支持从测试中的存根中删除异常(请参阅“模拟 Android 依赖项”末尾的 here)将不起作用,因为这只会影响您的 Gradle 构建。
我能想到的唯一解决方案是在Kotlin tracker 上打开一个问题,或者通过source code of the REPL function in the Kotlin plugin 挖掘并发送一个拉取请求。
【讨论】: