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.

  • Alterair a duração do timeout da Volley
  • Como configurair o Http Cache ao usair Volley com OkHttp?
  • Como fazer uma solicitação de publicação de soap usando a biblioteca de Volley no Android
  • Faça solicitação de volei em linha diferente
  • Registros de debugging detalhados com Volley
  • Por que a string de resposta da volley usa uma encoding diferente daquela nos headers de resposta?
  • 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) 

  • Alterair a duração do timeout da Volley
  • Por que a string de resposta da volley usa uma encoding diferente daquela nos headers de resposta?
  • Android - erro de voltagem Nenhum desafio de authentication encontrado
  • Erro de exception de volei quando o código de resposta 304 e 200
  • Como fazer uma solicitação de publicação de soap usando a biblioteca de Volley no Android
  • Faça solicitação de volei em linha diferente
  • 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.