如何解决如何编写依赖于位置更新的Android单元测试?
| 我有一个显示对应于该位置的梅登黑德网格正方形的应用。我想为此功能编写一个单元测试。 我创建了一个模拟位置提供程序。当我将模拟提供程序粘贴到我的应用程序中时,我会在显示屏上看到预期的Maidenhead网格正方形。当我将模拟提供程序插入我的测试项目并检查视图时,即使我调用Thread.sleep()或waitOnIdleSync(),它也永远不会更新。 我将直接测试计算实际网格平方的方法,但是它是私有的,因此无法测试私有方法。我在网上看到的用于检查视图的单元测试的所有示例代码都是针对计算器之类的应用的,其中活动是由假按钮按下触发的。 这是测试代码: public void testMaidenhead() {
// this is a single test which doesn\'t really validate the algorithm
// identifying a bunch of edge cases would do that
publishMocklocation();
final String expectedMH = \"CM87wk\";
// Todo: checking the textview does not work
TextView mhValueView = (TextView) mActivity.findViewById(org.twilley.android.hfbeacon.R.id.maidenheadValue);
String actualMH = mhValueView.getText().toString();
// final String actualMH = mActivity.gridSquare(mLocation);
assertEquals(expectedMH,actualMH);
}
这是发布模拟位置的代码:
protected void publishMocklocation() {
final double TEST_LONGITUDE = -122.084095;
final double TEST_LATITUDE = 37.422006;
final String TEST_PROVIDER = \"test\";
final Location mLocation;
final LocationManager mLocationManager;
mLocationManager = (LocationManager) mActivity.getSystemService(Context.LOCATION_SERVICE);
if (mLocationManager.getProvider(TEST_PROVIDER) != null) {
mLocationManager.removeTestProvider(TEST_PROVIDER);
}
if (mLocationManager.getProvider(TEST_PROVIDER) == null) {
mLocationManager.addTestProvider(TEST_PROVIDER,false,//requiresnetwork,// requiresSatellite,// requiresCell,// hasMonetaryCost,// supportsAltitude,// supportsspeed,// supportsbearing,android.location.Criteria.POWER_MEDIUM,// powerRequirement
android.location.Criteria.ACCURACY_FINE); // accuracy
}
mLocation = new Location(TEST_PROVIDER);
mLocation.setLatitude(TEST_LATITUDE);
mLocation.setLongitude(TEST_LONGITUDE);
mLocation.setTime(System.currentTimeMillis());
mLocation.setAccuracy(25);
mLocationManager.setTestProviderEnabled(TEST_PROVIDER,true);
mLocationManager.setTestProviderStatus(TEST_PROVIDER,LocationProvider.AVAILABLE,null,System.currentTimeMillis());
mLocationManager.setTestProviderLocation(TEST_PROVIDER,mLocation);
}
任何帮助将不胜感激。先感谢您!
插口。
解决方法
单元测试不会使您的手机伪造其GPS位置,因此它会向您显示要测试的位置的“少女头”。单元测试将是:编写一个获取WGS84 GPS坐标并输出Maidenhead的函数,并针对一系列输入位置和输出编写一些测试,以确保您的函数按需工作。
测试实际的Android活动将是集成或验收测试,但与Maidenhead功能的实际协调应在您进行单元测试时起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。