Я нахожусь в процессе миграции robolectric 3.0robolectric 3,0 Mockito - как издеваются класс внутри деятельности
Проблема Statement--
У меня есть класс AppUtility, который конкретизируется в MyActivity, поэтому для проверки его методов вызывается, мне нужно издеваться над ним в своем тесте перед настройкой MyActivity.
Вот мой код:
@Mock
private AppUtility mockAppUtility;
@Before
public void setUp() {
initMocks(this);
myActivity= Robolectric.setupActivity(MyActivity.class);
equalsButton = (Button) myActivity.findViewById(R.id.equals_sign);
shadowActivity = Shadows.shadowOf(myActivity);
}
Вот метод испытания: -
@Test
public void shouldCallStartAlarm() {
for (int i = 0; i < 4; i++) {
equalsButton.performClick();
}
verify(mockAppUtility).startAlarm();
}
Bu Я получаю следующее сообщение об ошибке Сообщ: - которые показывают макет не связан с деятельностью , как я могу привязать его к активности?
Actually, there were zero interactions with this mock.
Но макет объекта не связан с тестом. С ранней версии Robolectric я использую, чтобы связать фиктивный объект по созданию деятельности, путем переопределения его, как показано ниже
myActivity = new MyActivity() {
@Override
AppUtility getUtil() {
return mockAppUtility;
}
};
myActivity.onCreate(new Bundle());
и использовать для работы в порядке, с Robolectric 3.0, как я могу связать фиктивный объект перед началом деятельности ,
После @nenick вашего второго варианта: Вот как это выглядит
@Mock
private AppUtility appUtility;
@InjectMocks
private MyActivity myActivity;
@Before
public void setUp() {
ActivityController<MyActivity> activityController = Robolectric.buildActivity(MyActivity.class);
// myActivity= Robolectric.setupActivity(MyActivity.class);
myActivity=activityController.get();
initMocks(this);
activityController.setup();
equalsButton = (Button) myActivity.findViewById(R.id.equals_sign);
// shadowActivity = Shadows.shadowOf(calculatorActivity);
}
но я получаю fllowing исключения: -
java.lang.IllegalArgumentException: attempted to invoke public final android.app.Application org.robolectric.shadows.ShadowActivity.getApplication() on instance of class org.com.android.AppUtility$$EnhancerByMockitoWithCGLIB$$77c74666, but AppUtility$$EnhancerByMockitoWithCGLIB$$77c74666 doesn't extend ShadowActivity
он ломает на этапе - activityController.setup() ;
Я обновляю это в своем вопросе, он выглядит неуклюжим здесь. –
Спасибо @nenick, ложная функция впрыска была действительно полезной. –
Вы устранили исключение IllegalArgumentException? Mockito является агрессивным и заменяет свойство __robo_data__. – nenick