1

Robolectric (バージョン 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)が、テスト中の関数は依然として isScreenOn() に対して true を返します。なんで?

4

1 に答える 1