android – NPE当与Volley和Dagger获得Robolectric ShadowApplication时

在我的 Android应用程序中,我已经设置了Volley.

Robolectric.application被初始化,所有其他测试运行顺利.
尝试得到嘲笑的HTTP响应时,我收到此错误.

这是我的考验

@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",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)

解决方法

我有同样的错误,并避免使用我自己(和丑)的SystemClock阴影.

影子类:

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

测试代码

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...