waitForCondition() 在 Robotium 中的 Solo 类上使用 Sleeper 对象在检查条件之间使线程休眠。睡眠类的暂停定义为 500 毫秒。我想降低它,理想情况下不要下载 Robotium 源代码、更改它并重新编译 Robotium。
我尝试扩展 Solo 类并构造我自己的 Waiter 类,该类将使用具有较低睡眠间隔的自定义 Sleeper 对象,但 Waiter 具有包级访问权限,因此此路由不可用。
撇开最后一个关键字不谈,这条提交消息似乎表明自定义配置应该(或即将到来),但我看不到任何方法可以在 Solo.Config 类中自定义这些常量。
有人有任何解决方案吗?谢谢!
更新:@vRallev下面的答案通过反思完成了工作。我提出了一个拉取请求,今天已合并到Robotium中。在下一版本中,您将能够使用 Config 类配置睡眠时间。
即使Waiter
或Sleeper
类是公共的,也无法更改值。原因是 Solo
类中的 waiter
字段是最终的,并且分配值的构造函数是私有的。
解决这个问题的唯一方法是反思。我尝试了下面的解决方案,它有效。请注意这两个类的包!
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);
}
}