机器人 - 自定义卧铺类中的暂停持续时间



waitForCondition() 在 Robotium 中的 Solo 类上使用 Sleeper 对象在检查条件之间使线程休眠。睡眠类的暂停定义为 500 毫秒。我想降低它,理想情况下不要下载 Robotium 源代码、更改它并重新编译 Robotium。

尝试扩展 Solo 类并构造我自己的 Waiter 类,该类将使用具有较低睡眠间隔的自定义 Sleeper 对象,但 Waiter 具有包级访问权限,因此此路由不可用。

撇开最后一个关键字不谈,这条提交消息似乎表明自定义配置应该(或即将到来),但我看不到任何方法可以在 Solo.Config 类中自定义这些常量。

有人有任何解决方案吗?谢谢!

更新:@vRallev下面的答案通过反思完成了工作。我提出了一个拉取请求,今天已合并到Robotium中。在下一版本中,您将能够使用 Config 类配置睡眠时间。

即使WaiterSleeper类是公共的,也无法更改值。原因是 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);
  }
}

最新更新