日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CTS测试中的testSensorOperations项

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.xml

Android的/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项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。