Mockito создает экземпляр прокси-сервера, когда что-то проверяется. Теперь, есть ли способ перенаправить сеттеры, которые затем выполняются на этом экземпляре прокси, на реальный экземпляр, который стоит за ним?
Обоснование: у меня есть экземпляр объекта, который у меня не полностью под моим контролем, т.е. активность Android. Я могу предоставить большинство частей моего приложения прокси-версию и работает нормально, как есть, , но, потому что мне нужно создать spy/proxy очень рано на этапе создания этой операции, это еще не полностью экземпляр, например базовый контекст не привязан. Это происходит на экземпляре прокси и, конечно, не используется самим экземпляром активности (который относится к нему через Activity.this
). Конечным результатом является то, что это приводит ко всем видам сбоев, потому что разрешение ресурсов происходит через этот базовый контекст, поэтому внутреннее устройство фрагментации бросает NPE и многое другое.
Вот какой код:
public class CustomAndroidJUnitRunner extends AndroidJUnitRunner {
@Override
public Activity newActivity(ClassLoader cl, String className, Intent intent)
throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Activity activity = super.newActivity(cl, className, intent);
return maybeStubSomeDelegate(activity);
}
private Activity maybeStubSomeDelegate(Activity activity) {
if (!(activity instanceof SomeDelegate)) {
return activity;
}
Activity spiedActivity = spy(activity);
doReturn(SomeDelegateMock.getInstance())
.when((SomeDelegate) spiedActivity)
.getDelegate();
return spiedActivity;
}
}
Я не знаю, какие идеи?