2015-12-03 3 views
3

Я видел этот roboletirc пример:В чем разница между `createActivity` и` shadowOf`?

@Test 
    public void shouldHaveHappySmiles() throws Exception { 
    String hello = new MainActivity().getResources().getString(R.string.hello_world); 
    assertThat(hello, equalTo("Hello world!")); 
    } 

    @Before 
    public void setup() { 
    activity = Robolectric.buildActivity(MainActivity.class) 
     .create().get(); 
    } 
    @Test 
    public void checkActivityNotNull() throws Exception { 
    assertNotNull(activity); 
    } 

    @Test 
    public void buttonClickShouldStartNewActivity() throws Exception 
    { 
     Button button = (Button) activity.findViewById(R.id.button2); 
     button.performClick(); 
      Intent intent = Robolectric.shadowOf(activity).peekNextStartedActivity(); 
      assertEquals(SecondActivity.class.getCanonicalName(), inten 

t.getComponent().getClassName()); 
    } 

Я попытался посмотреть в документации, но не понял разницу между createActivity и shadowOf. может кто-то пролить некоторый свет?

btw, почему в этом тесте есть new MainActivity().getResources().getString(R.string.hello_world);? когда следует использовать new вместо createActivity()?

ответ

0

Тени обеспечивают замену функциональности для фактического класса при тестировании. Они также иногда предоставляют функциональные возможности, не найденные в классе, который они теневые, так что вы можете включать и выключать функции и проверять проверку внутренних значений объекта, который затенен.

Например: Выключение Google Analytics в тестовых классах

ShadowApplication shadowApplication =
Robolectric.shadowOf_ (Robolectric.application); shadowApplication.declareActionUnbindable ("com.google.android.gms.analytics.service.START");

О Shadows: http://robolectric.org/extending/

Не используйте "Новый" использовать buildActivity. Это дает вам полный контроль жизненного цикла активности, чтобы вы могли проверять действия в Деятельности после каждого шага цикла запуска. Вы можете вызвать get() без вызова onResume, например.

activitySome = 
Robolectric.buildActivity(SomeActivity.class).withIntent(intent).create().start().resume().visible().get(); 

Вы можете вызвать getResources() в классе активности после вызова .get() в buildActivity.

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