我开始围绕硬件特定功能编写 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);
}
}
对此也不太满意,因为我想在同一个测试中测试不同的场景。
有任何想法吗?最好的方法是什么?