NPE在用排雷和匕首获得Robolectric ShadowApplication时

在我的Android应用程序中,我设置了Volley。

Robolectric.application初始化,所有其他testing运行顺利。 尝试获取模拟的HTTP响应时出现此错误。

这是我的testing:

@RunWith(MyRobolectricTestRunner.class) public class ApiTests { @Inject protected Api api; @Before public void setUp() { ObjectGraph.create(new AndroidModule(Robolectric.application), new TestApplicationModule()).inject(this); } @Test public void shouldGetErrorList() throws Exception { Project project = new Project("test", "test", "test", DateTime.now()); addPendingProjectsErrorsResponse("response.json"); //adding response to FakeHttpLayer api.getProjectErrors(project, new Listener<ProjectErrors>() { @Override public void onResponse(ProjectErrors response) { assertNotNull(response); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { throw new RuntimeException(error); } } ); } } 

这是我得到的错误:

 Exception in thread "Thread-3" java.lang.NullPointerException at org.robolectric.shadows.ShadowLooper.getMainLooper(ShadowLooper.java:59) at android.os.Looper.getMainLooper(Looper.java) at org.robolectric.Robolectric.getUiThreadScheduler(Robolectric.java:1301) at org.robolectric.shadows.ShadowSystemClock.now(ShadowSystemClock.java:15) at org.robolectric.shadows.ShadowSystemClock.uptimeMillis(ShadowSystemClock.java:25) at org.robolectric.shadows.ShadowSystemClock.elapsedRealtime(ShadowSystemClock.java:30) at android.os.SystemClock.elapsedRealtime(SystemClock.java) at com.android.volley.VolleyLog$MarkerLog.add(VolleyLog.java:114) at com.android.volley.Request.addMarker(Request.java:174) at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:92) 

Solutions Collecting From Web of "NPE在用排雷和匕首获得Robolectric ShadowApplication时"

我有同样的错误,并通过使用我自己的(和丑陋的)SystemClock阴影避免它。

影子类:

 @Implements(value = SystemClock.class, callThroughByDefault = true) public static class MyShadowSystemClock { public static long elapsedRealtime() { return 0; } } 

testing代码:

 @Test @Config(shadows = { MyShadowSystemClock.class, ... }) public void myTest() { } 

另一个解决方法是通过调用禁用Volley日志logging

 VolleyLog.DEBUG = false; 

在你的setUp方法中。