2013-06-09 2 views
10

В моем приложении для Android я настроил Volley.NPE при получении Robolectric ShadowApplication с волейболом и кинжалом

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

ответ

-2

я имел такую ​​же ошибку и избежать его, используя свой собственный (и уродливый) 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() { 
} 
-2

Другой обходной путь будет отключить Volley регистрацию по телефону

VolleyLog.DEBUG = false; 

в методе нАлАдкА.

Смежные вопросы