gpt4 book ai didi

android - 单元测试定位服务

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:05:43 26 4
gpt4 key购买 nike

我有一个位置跟踪服务,我正在尝试对其进行单元测试。我正在尝试使用 locationManager.addTestProvider 和 setTestProviderLocation 方法来实现此目的。但是,我似乎无法获得任何位置以通过提供者并点击我的 LocationListener。这是我的代码:

public void testGettingLocations() {
mLocationManager = (LocationManager)mContext.getSystemService(Context.LOCATION_SERVICE);

if (mLocationManager.getProvider(TEST_PROVIDER) != null) {
mLocationManager.removeTestProvider(TEST_PROVIDER);
}

mLocationManager.addTestProvider(TEST_PROVIDER, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
mLocationManager.setTestProviderEnabled(TEST_PROVIDER, true);
mLocationManager.setTestProviderStatus(TEST_PROVIDER, LocationProvider.AVAILABLE, null, System.currentTimeMillis());


locations = new ArrayList<Location>();


mLocationManager.requestLocationUpdates(TEST_PROVIDER, 0, 0, ll);


for (int i = 0; i<130; i++) {
Location loc = new Location(TEST_PROVIDER);
loc.setLatitude(0 + i);
loc.setLongitude(130 - i);
loc.setTime(System.currentTimeMillis());
loc.setSpeed(0);
loc.setAccuracy(25);
loc.setAltitude(0);
loc.setBearing(0);
mLocationManager.setTestProviderLocation(TEST_PROVIDER, loc);
}

assertEquals(130, locations.size());
}

LocationListener ll = new LocationListener() {

@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onLocationChanged(Location location) {
locations.add(location);
Log.d("TEST", "lat: " + location.getLatitude() + ", lon: " + location.getLongitude());
}
};

断言失败,因为 locations.size() 返回 0,并且我的 locationlistener 中的日志语句永远不会被打印。

有没有人成功使用这些方法对位置服务进行单元测试?

最佳答案

在进行以下修改后,我能够让@ingsaurabh 的示例在单元测试中运行:

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;

public final class TestLocationProvider {
static void sendLocation(double latitude, double longitude) {
try {
Socket socket = new Socket("10.0.2.2", 5554); // usually 5554
socket.setKeepAlive(true);
String str = "geo fix " + longitude + " " + latitude ;
Writer w = new OutputStreamWriter(socket.getOutputStream());
w.write(str + "\r\n");
w.flush();
}
catch (UnknownHostException e) {
throw new RuntimeException(e);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
}

重要的细节是 IP 地址。模拟器无法将“localhost”识别为有效的主机名。

关于android - 单元测试定位服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com