У меня есть приложение, которое отображает квадрат сетки Maidenhead, соответствующий этому местоположению.Я хотел бы написать модульный тест для этой функции.
Я создал провайдер фиктивного местоположения.Когда я втыкаю провайдера-макета в свое приложение, я вижу ожидаемый квадрат сетки 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,
false, // requiresSatellite,
false, // requiresCell,
false, // hasMonetaryCost,
false, // supportsAltitude,
false, // supportsSpeed,
false, // 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);
}
Любая помощь будет принята с благодарностью.Заранее спасибо!
Джек.