我想为具有自己的 EventBus 实例的类编写一些单元测试,但它不起作用,因为 EventBus 在其构造函数中使用了 Android 的 Handler。 使用 Otto 我可以做到,但我想改用 EventBus。 有任何想法吗?
java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details.
at android.os.Looper.getMainLooper(Looper.java)
at org.greenrobot.eventbus.EventBus.<init>(EventBus.java:111)
at org.greenrobot.eventbus.EventBus.<init>(EventBus.java:104)
(...)
Process finished with exit code 255
好,谢谢!
@gsteigert我和我的团队在集成 GreenRobot Eventbus 时遇到了这个确切的问题。 我们想验证 eventbus 是否正在发布特定事件,而不是已发布事件的执行。
您可以通过反射和 mockito 模拟来实现这一点。
爪哇:
Field field = EventBus.class.getDeclaredField("defaultInstance");
if (!field.isAccessible()) field.setAccessible(true);
field.set(null, Mockito.mock(EventBus.class));
科特林:
val field = EventBus::class.java.getDeclaredField("defaultInstance")
if (!field.isAccessible) field.isAccessible = true
field.set(null, mock<EventBus>())
感谢@jmholtan的回答,它对我
请注意,从3.1.1
EventBus 也适用于纯 Java 项目,也适用于 Android 本地单元测试。 但请注意,某些线程模式的行为可能有所不同。 -ut
最有用的评论
@gsteigert我和我的团队在集成 GreenRobot Eventbus 时遇到了这个确切的问题。 我们想验证 eventbus 是否正在发布特定事件,而不是已发布事件的执行。
您可以通过反射和 mockito 模拟来实现这一点。
爪哇:
科特林: