Robotium – настройка продолжительности PAUSE в классе Sleeper

WaitForCondition () в классе Solo в Robotium использует объект Sleeper для спящего потока между проверкой состояния. Класс Sleeper имеет PAUSE, определяемый как 500 миллисекунд. Я хочу снизить это, в идеале, без загрузки исходного кода Robotium, изменения его и перекомпиляции Robotium.

Я попытался расширить класс Solo и построить собственный класс Waiter, который будет использовать пользовательский объект Sleeper с более низкими интервалами времени ожидания, но у официанта есть доступ на уровне пакета, поэтому этот маршрут недоступен.

Последнее ключевое слово в стороне, это сообщение фиксации, кажется, указывает, что пользовательские конфигурации должны быть (или приходят), но я не вижу никакого способа настроить эти константы в классе Solo.Config .

У кого-нибудь есть какие-то решения? Благодаря!

Обновление: ответ @ vRallev ниже выполняет работу с отражением. Я сделал запрос на загрузку, который сегодня был объединен с Robotium. В следующем выпуске вы сможете настроить время сна с помощью класса Config.

Даже если класс Waiter или Sleeper был общедоступным, вы не можете изменить значения. Причина в том, что поле waiter в классе Solo является окончательным, а конструктор, которому присвоено значение, является закрытым.

Единственный способ взломать это – с отражением. Я попробовал решение ниже, и он работает. Обратите внимание на пакет обоих классов!

 package com.robotium.solo; import java.lang.reflect.Field; public class SoloHack { private final Solo mSolo; public SoloHack(Solo solo) { mSolo = solo; } public void hack() throws NoSuchFieldException, IllegalAccessException { Field field = mSolo.waiter.getClass().getDeclaredField("sleeper"); field.setAccessible(true); // Object value = field.get(mSolo.waiter); // Class<?> aClass = value.getClass(); field.set(mSolo.waiter, new SleeperHack()); // Object newValue = field.get(mSolo.waiter); // Class<?> newClass = newValue.getClass(); } } 

А также

 package com.robotium.solo; public class SleeperHack extends Sleeper { @Override public void sleep() { sleep(50); } }