ShadowPowerManager setIsScreenOn(false),但isScreeOn()返回true

时间:2015-10-09 16:20:22

标签: android robolectric android-powermanager

我正在使用Robolectric(版本3)为我的Android项目编写测试用例。这是我简单的测试场景:

测试中的功能是:

@Test
@Config(sdk = Build.VERSION_CODES.JELLY_BEAN_MR1)
public void testIsScreenOn() {
  //get Context
  Context context = ShadowApplication.getInstance().getApplicationContext();
  //get power manager
  PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
  //get shadow power manager
  ShadowPowerManager shadowPowerManager = Shadows.shadowOf(powerManager);

  //set screen off
  shadowPowerManager.setIsScreenOn(false);

  //isScreenOn() in MyClass returns true, why?
  MyClass myObj = new MyClass(context);
  AssertFalse(myObj.isScreenOn()); //Failed!

}

(我知道{API {3}}已从Android API版本20弃用,但我的测试设置为运行Android API 17)

测试功能是:

setIsScreenOn(false)

虽然我已将isScreenOn()实例用于<p:dataTable id="tableId" var="orderView" value="#{orderTable.getPaddedOrderViews(100)}" emptyMessage="EMPTY" scrollable="true" scrollHeight="550" resizableColumns="true" resizeMode="fit"> ... ,但测试中的函数仍为isScreenOn()返回true。为什么呢?

1 个答案:

答案 0 :(得分:0)

与Alex Florescu相同我试图运行你的测试(https://github.com/emartynov/robolectic-experiments/commit/065f6d2d5b008a4e4dc9bd3fac27ee8f8d650dc0)。

但我无法复制。我看到的唯一区别就是用API21运行它。

在较低的API上运行它对你有什么影响吗?