【发布时间】:2016-11-13 14:11:40
【问题描述】:
所以我正在开发这个使用 Dagger 2 进行依赖注入并将 Realm 作为数据库的小项目。
我正在使用 Robolectric 和 Mockito(使用 Powermock)对其进行单元测试。从之前的研究(以及很多痛苦)中,我意识到测试 Realm 非常费力,但过去已经完成了here。
现在,我的项目的设置和结构与上面链接的项目非常相似。
当我运行我的单元测试时,所有测试都通过了,除了一个给我一个非常神秘的消息,如下所示:
java.lang.NullPointerException
at org.robolectric.internal.ShadowExtractor.extract(ShadowExtractor.java:5)
at org.robolectric.Shadows.shadowOf(Shadows.java:1190)
at org.robolectric.shadows.CoreShadowsAdapter.getMainLooper(CoreShadowsAdapter.java:37)
at org.robolectric.util.ComponentController.<init>(ComponentController.java:31)
at org.robolectric.util.ComponentController.<init>(ComponentController.java:23)
at org.robolectric.util.ActivityController.<init>(ActivityController.java:40)
at org.robolectric.util.ActivityController.of(ActivityController.java:32)
at org.robolectric.Robolectric.buildActivity(Robolectric.java:82)
at org.robolectric.Robolectric.buildActivity(Robolectric.java:78)
at org.robolectric.Robolectric.setupActivity(Robolectric.java:86)
at uk.co.placona.tradesafe.view.EditActivityTest.ActivityShouldNotBeNull(EditActivityTest.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl
上面错误中指定的代码行是:
activity = Robolectric.setupActivity(EditActivity.class);
Activity 存在,并在启动时向其注入了 TradeRepository。
可以在here 中找到相关活动以及其余代码。我已经尝试调试了大约 3 天,但没有成功。我创建的所有其他单元测试都可以正常工作,除了 Activity 使用的任何单元测试,这让我觉得我可能遗漏了一些非常明显的东西。
很乐意在这里澄清任何问题。非常感谢!
【问题讨论】:
-
你用
PowerMock运行它吗? -
是的,已经检查过了。 'PowerMock' 总是很棘手
-
是的,这正是我所发现的。看到有人建议不要使用它,我认为此时我真的需要它
标签: android unit-testing realm robolectric dagger-2