センサーやカメラ (前面と背面) などのハードウェア固有の機能に関する robolectric テストの作成を開始しました。
このクラスを想像してください:
class CheckHardware {
private bolean hasCamera(Context context) {
PackageManager pm = context.callingActivityContext
.getPackageManager();
// camera support
Boolean frontCam = pm.hasSystemFeature("android.hardware.camera.front");
Boolean rearCam = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
if (frontCam || rearCam) {
return true;
}
return false;
}
}
そのため、フロント カメラとリア カメラがある場合、フロント カメラのみがある場合、またはカメラがまったくない場合のさまざまなシナリオをテストしたいと考えています。私のアプリではもう少し複雑ですが、これで私の言いたいことが理解しやすくなることを願っています。
今のところ、私はこのようにしましたが、少し奇妙に感じます。
RobolectricPackageManager pm = (RobolectricPackageManager) Robolectric.application.getPackageManager();
pm.setSystemFeature(PackageManager.FEATURE_CAMERA, true);
独自のテスト ランナーを作成することを考えたので、予想されるすべてのハードウェア設定に対して、このような特定のランナー
public class WithCameraTestRunner extends RobolectricTestRunner {
@Override
public void setupApplicationstate(RobolectricConfig robolectricConfig) {
super.setupApplicationState(robolectricConfig);
ShadowApplication shadowApplication = shadowOf(Robolectric.application);
shadowApplication.setPackageName(robolectricConfig.getPackageName());
RobolectricPackageManager pm = new RobolectricPackageManager(Robolectric.application, robolectricConfig)
pm.setSystemFeature(PackageManager.FEATURE_CAMERA, true);
shadowApplication.setPackageManager(pm);
}
}
同じテストでさまざまなシナリオをテストしたいので、それにはあまり満足していません。
何か案は?これに対する最善のアプローチは何ですか?