1

我正在尝试使用 spek 框架编写一些单元测试,但是Method threw 'java.lang.RuntimeException exception. Stub!在尝试访问Looper.getMyLooper()代码中的 Looper () 时会一直遇到 RuntimeException ()。

我使用TestSchedulerRx 提供的作为调度程序并尝试@RunWith(AndroidJUnit4::class)@RunWith(RobolectricTestRunner::class)

任何指针?

4

1 回答 1

1

Looper 是 Android 依赖项,您不能在单元测试中使用它。 https://developer.android.com/studio/test#test_types_and_location

这些是在您机器的本地 Java 虚拟机 (JVM) 上运行的测试。当您的测试没有 Android 框架依赖项或您可以模拟 Android 框架依赖项时,使用这些测试可以最大限度地缩短执行时间。

尝试从测试类中删除显式 Looper 依赖项并从外部传递它(https://developer.android.com/training/dependency-injection)这是导致快速单元测试和可维护代码的最佳解决方案。

第二种选择是将您的测试重写为检测测试并在 Android 模拟器上运行它。这个测试会很慢。

第三个选项是设置 Robolectric 来模拟 Looper。看看http://robolectric.org/javadoc/3.0/org/robolectric/shadows/ShadowLooper.html

于 2020-06-03T22:08:04.243 回答