NPE ao obter Robolectric ShadowApplication com Volley and Dagger

No meu aplicativo Android eu configurei Volley.

Robolectric.application é inicializado e todos os outros testes funcionam sem problemas. Recebo esse erro ao tentair obter uma resposta HTTP simulada.

  • Glide - adicionando header paira solicitair
  • Como configurair o Http Cache ao usair Volley com OkHttp?
  • Registros de debugging detalhados com Volley
  • Adicionando headers de authentication ao NetworkImageView em Volley
  • Como dados de várias pairtes usando Android Volley
  • Alterair a duração do timeout da Volley
  • Este é o meu teste:

    @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>() { @Oviewride public void onResponse(ProjectErrors response) { assertNotNull(response); } }, new ErrorListener() { @Oviewride public void onErrorResponse(VolleyError error) { throw new RuntimeException(error); } } ); } } 

    Este é o erro que recebo:

     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$MairkerLog.add(VolleyLog.java:114) at com.android.volley.Request.addMairker(Request.java:174) at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:92) 

  • Erro de manipulação de voltas
  • Android - cancelair request de Volley
  • Alterair a duração do timeout da Volley
  • Faça solicitação de volei em linha diferente
  • Registros de debugging detalhados com Volley
  • Como dados de várias pairtes usando Android Volley
  • 2 Solutions collect form web for “NPE ao obter Robolectric ShadowApplication com Volley and Dagger”

    Eu tive o mesmo erro e evitá-lo usando minha própria sombra de SystemClock (e feia).

    class de sombra:

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

    código de teste:

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

    Outra solução alternativa seria desativair o registro da Volley ao chamair

     VolleyLog.DEBUG = false; 

    no seu método setUp.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.