小编Tos*_*osa的帖子

如何在Android上使用Robolectric测试特定的硬件功能?

我开始围绕硬件特定功能编写一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我想测试不同的场景,那里有前置摄像头和后置摄像头,只有前置摄像头或根本没有摄像头.在我的应用程序中它有点复杂,但希望这使我更容易理解我的意思.

现在我这样做了,感觉有点奇怪.

RobolectricPackageManager pm = (RobolectricPackageManager) Robolectric.application.getPackageManager();
pm.setSystemFeature(PackageManager.FEATURE_CAMERA, true);
Run Code Online (Sandbox Code Playgroud)

我想过编写自己的测试运行器,所以对于所有预期的硬件设置,这样的特定运行器

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

对此不太满意,因为我想在同一测试中测试不同的场景.

有任何想法吗?这是最好的方法吗?

java testing android robolectric

5
推荐指数
1
解决办法
2084
查看次数

标签 统计

android ×1

java ×1

robolectric ×1

testing ×1