CTS测试中的testSensorOperations项
生活随笔
收集整理的這篇文章主要介紹了
CTS测试中的testSensorOperations项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)測試異常
run cts -m CtsSensorTestCases -t android.hardware.cts.SensorTest#testSensorOperationsError: 01-20 11:31:24.134 8774 8804 I TestRunner: started: testSensorOperations(android.hardware.cts.SensorTest) 01-20 11:31:24.173 8774 8804 E TestRunner: failed: testSensorOperations(android.hardware.cts.SensorTest) 01-20 11:31:24.173 8774 8804 E TestRunner: ----- begin exception ----- 01-20 11:31:24.174 8774 8804 E TestRunner: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.hardware.Sensor.getType()' on a null object reference 01-20 11:31:24.174 8774 8804 E TestRunner: at android.hardware.cts.SensorTest.testSensorOperations(SensorTest.java:164) 01-20 11:31:24.174 8774 8804 E TestRunner: at java.lang.reflect.Method.invoke(Native Method) 01-20 11:31:24.174 8774 8804 E TestRunner: at junit.framework.TestCase.runTest(TestCase.java:168) 01-20 11:31:24.174 8774 8804 E TestRunner: at junit.framework.TestCase.runBare(TestCase.java:134) 01-20 11:31:24.174 8774 8804 E TestRunner: at android.hardware.cts.SensorTestCase.runBare(SensorTestCase.java:52) 01-20 11:31:24.174 8774 8804 E TestRunner: at junit.framework.TestResult$1.protect(TestResult.java:115) 01-20 11:31:24.174 8774 8804 E TestRunner: at androidx.test.internal.runner.junit3.AndroidTestResult.runProtected(AndroidTestResult.java:73) 01-20 11:31:24.174 8774 8804 E TestRunner: at junit.framework.TestResult.run(TestResult.java:118) 01-20 11:31:24.174 8774 8804 E TestRunner: at androidx.test.internal.runner.junit3.AndroidTestResult.run(AndroidTestResult.java:51) 01-20 11:31:24.174 8774 8804 E TestRunner: at junit.framework.TestCase.run(TestCase.java:124) 01-20 11:31:24.174 8774 8804 E TestRunner: at androidx.test.internal.runner.junit3.NonLeakyTestSuite$NonLeakyTest.run(NonLeakyTestSuite.java:62) 01-20 11:31:24.174 8774 8804 E TestRunner: at androidx.test.internal.runner.junit3.AndroidTestSuite$2.run(AndroidTestSuite.java:101) 01-20 11:31:24.174 8774 8804 E TestRunner: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) 01-20 11:31:24.174 8774 8804 E TestRunner: at java.util.concurrent.FutureTask.run(FutureTask.java:266) 01-20 11:31:24.174 8774 8804 E TestRunner: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 01-20 11:31:24.174 8774 8804 E TestRunner: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 01-20 11:31:24.174 8774 8804 E TestRunner: at java.lang.Thread.run(Thread.java:923) 01-20 11:31:24.175 8774 8804 E TestRunner: ----- end exception ----- 01-20 11:31:24.176 8774 8804 I TestRunner: finished: testSensorOperations(android.hardware.cts.SensorTest) 01-20 11:31:24.194 8774 8802 I TestRunner: run finished: 1 tests, 1 failed, 0 ignored(2)測試源碼
//frameworks/base/core/java/android/content/pm/PackageManager.javapublic static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer"; public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass"; public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope"; public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light"; //...//測試源碼 //cts/tests/sensor/src/android/hardware/cts/SensorTest.java@SuppressWarnings("deprecation")public void testSensorOperations() {// Because we can't know every sensors unit details, so we can't assert// get values with specified values.Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);boolean hasAccelerometer = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_ACCELEROMETER);// accelerometer sensor is optionalif (hasAccelerometer) {assertEquals(Sensor.TYPE_ACCELEROMETER, sensor.getType());assertSensorValues(sensor);} else {assertNull(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);boolean hasStepCounter = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_STEP_COUNTER);// stepcounter sensor is optionalif (hasStepCounter) {assertEquals(Sensor.TYPE_STEP_COUNTER, sensor.getType());assertSensorValues(sensor);} else {assertNull(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);boolean hasStepDetector = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_STEP_DETECTOR);// stepdetector sensor is optionalif (hasStepDetector) {assertEquals(Sensor.TYPE_STEP_DETECTOR, sensor.getType());assertSensorValues(sensor);} else {assertNull(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);boolean hasCompass = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS);// compass sensor is optionalif (hasCompass) {//通過添加Log確認是這里拋出的NullPointerExceptionassertEquals(Sensor.TYPE_MAGNETIC_FIELD, sensor.getType()); assertSensorValues(sensor);} else {assertNull(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);boolean hasGyroscope = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_GYROSCOPE);// gyroscope sensor is optionalif (hasGyroscope) {assertEquals(Sensor.TYPE_GYROSCOPE, sensor.getType());assertSensorValues(sensor);} else {assertNull(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);boolean hasPressure = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_BAROMETER);// pressure sensor is optionalif (hasPressure) {assertEquals(Sensor.TYPE_PRESSURE, sensor.getType());assertSensorValues(sensor);} else {assertNull(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);// Note: orientation sensor is deprecated.if (sensor != null) {assertEquals(Sensor.TYPE_ORIENTATION, sensor.getType());assertSensorValues(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);// temperature sensor is optionalif (sensor != null) {assertEquals(Sensor.TYPE_TEMPERATURE, sensor.getType());assertSensorValues(sensor);}sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE);boolean hasHingeAngle = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_HINGE_ANGLE);if (hasHingeAngle) {assertEquals(Sensor.TYPE_HINGE_ANGLE, sensor.getType());assertSensorValues(sensor);assertTrue("Max range must not be larger than 360. Range=" + sensor.getMaximumRange()+ " " + sensor.getName(), sensor.getMaximumRange() <= 360);} else {assertNull(sensor);}}我們單獨將出錯的這段code拉出來分析一下
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);boolean hasCompass = getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS);// compass sensor is optionalif (hasCompass) {//通過添加Log確認是這里拋出的NullPointerExceptionassertEquals(Sensor.TYPE_MAGNETIC_FIELD, sensor.getType()); assertSensorValues(sensor);} else {assertNull(sensor);}此題是由于sensor為null,但是hasCompass這個變量卻為true,從而導致sensor.getType()拋出NPE。
根本原因是平臺不支持地磁,但是xml文件中配置了地磁導致的,所以需要將其配置刪除。
(3)修改方案
若不支持compass,請移除如下檔案中的compass語句:
/frameworks/native/data/etc/android.hardware.sensor.compass.xml /frameworks/native/data/etc/handheld_core_hardware.xmlAndroid的/frameworks/native/data/etc/這個目錄下存在很多的xml配置文件,如果是上層的配置fail多和這里的xml有關。
(4)部分斷言語句的示例
static public void assertEquals(int expected, int actual) {if (expected != actual)throw new AssertionFailedException("not equals. Expected " + expected + " actual " + actual);}static public void assertEquals(String message, int expected, int actual) {if (expected != actual)throw new AssertionFailedException("not equals: " + message + " Expected " + expected + " actual " + actual);}static public void assertEquals(Object expected, Object actual) {if (expected == null && actual == null)return;if (expected != null && expected.equals(actual))return;throw new AssertionFailedException("not the same: " + expected + " vs " + actual);}static public void assertTrue(boolean condition) {if (!condition)throw new AssertionFailedException("condition was false");}static public void assertFalse(boolean condition) {if (condition)throw new AssertionFailedException("condition was true");}static public void assertNotNull(Object object) {if (object == null)throw new AssertionFailedException("object was null");}static public void assertNull(Object object) {if (object != null)throw new AssertionFailedException("object was not null");}static public void fail(String message) {fail(message, null);}static public void fail(String message, Throwable cause) {throw new AssertionFailedException(message, cause);}總結
以上是生活随笔為你收集整理的CTS测试中的testSensorOperations项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Telephony基础架构
- 下一篇: 中国头孢菌素药物行业市场供需与战略研究报