ShadowPowerManager setIsScreenOn(false), но isScreeOn() возвращает true

Я использую http://robolectric.org/ (версия 3), чтобы написать контрольный пример для моего проекта Android. Вот мой простой тестовый сценарий:

Тестируемая функция:

public class MyClass {
  private Context mContext;
  public MyClass(Context context) {
     mContext = context;
  }
  //function under test
  public boolean isScreenOn() {
    PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
    return powerManager.isScreenOn(); 
  }
}

(Я знаю, что isScreenOn() устарела с Android API версии 20, но мой тест настроен для запуска Android API 17)

Тестовая функция:

@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!

}

Хотя я использовал экземпляр ShadowPowerManager для setIsScreenOn(false)тестируемая функция все еще возвращает true для isScreenOn(). Зачем?

1 ответ

Так же, как Алекс Флореску, я пытался просто запустить ваш тест ( https://github.com/emartynov/robolectic-experiments/commit/065f6d2d5b008a4e4dc9bd3fac27ee8f8d650dc0).

Но я не смог воспроизвести. Единственное различие, которое я вижу, я использую API21.

Запускать его на более низком API что-то критическое для вас?

Другие вопросы по тегам