2015-09-18 1 views
1

Я использую Robolectric и пытаюсь создать теневой объект GoogleApiClient, но безуспешно. Методы из класса Shadow никогда не вызываются. Интерфейс GoogleApiClient - это может быть проблемой? Есть ли способ «затенять» интерфейс GoogleApiClient (или имитировать GoogleApiClient в тесте)?Создайте тень GoogleApiClient с Robolectric

Реализация:

@Implements(GoogleApiClient.class) 
public class ShadowGoogleApiClient { 

public void __constructor__(){ 
    System.out.println("__constructor____constructor__"); 
} 

@Implementation 
void connect() { 
    System.out.println("connectconnectconnect"); 
} 

@Implementation 
boolean isConnected() { 
    System.out.println("isConnectedisConnected"); 
    return false; 
} 

@Implementation 
boolean isConnecting() { 
    System.out.println("isConnectingisConnecting"); 
    return false; 
} 

}

и я определил класс Shadow в моем тесте:

@Config(shadows = {ShadowGoogleApiClient.class}, 
    constants = BuildConfig.class) 
@RunWith(CustomRobolectricRunner.class) 
public class ApiTest { 
... 
} 
+1

Вы должны зарегистрировать свой класс для затенения. См. Http://stackoverflow.com/questions/29629786/robolectric-shadow-not-working – nenick

+0

Собственно, он все еще не работает. Я добавил класс (GoogleApiClient) в InstrumentationConfiguration.Builder, но без изменений. – Zis

+0

GoogleApiClient - это интерфейс. Не уверен, но имеет смысл, что вы можете только тени конкретных классов. Настоящий класс реализации должен отображаться при отладке приложения. Вы можете теневые классы, которые недоступны с помощью свойства className из @Implements – nenick

ответ

0

Вы пробовали использовать Mockito издеваться реализацию GoogleApiClient ?

doAnswer(new Answer() { 
      @Override 
      public Object answer(InvocationOnMock invocation) throws Throwable { 
       myCallback.onConnected(); 
       return null; 
      } 
     }).when(mGoogleApiClient).connect();