2

場所の変更を textView に出力するアクティビティがあります。JUnitでテストしたい。ここに私のコードがあり、ここに私の出力があります:

public void testGPS() {
        {
            LocationManager lm = (LocationManager) myActivity
                    .getSystemService(Context.LOCATION_SERVICE);
            String testProvider = "Test";

            if (null == lm.getProvider(testProvider)) {
                lm.addTestProvider(testProvider, false, false, false, false,
                        false, false, false, Criteria.POWER_LOW,
                        Criteria.ACCURACY_FINE);
            }

            lm.setTestProviderEnabled(testProvider, true);
            lm.requestLocationUpdates(testProvider, 0, 0,
                    myActivity.mLocListener);
            lm.setTestProviderStatus(testProvider, LocationProvider.AVAILABLE,
                    null, System.currentTimeMillis());

            // getService().setUpProvider(testProvider,lm)

            Location location = new Location(testProvider);
            location.setLatitude(1.0);
            location.setLongitude(2.0);
            location.setTime(System.currentTimeMillis());
            lm.setTestProviderLocation(testProvider, location);

            String test_rs = "lon=" + location.getLongitude() + "\nlat="
                    + location.getLatitude();
            String msg = "Location Succeeded";
            // Assert.assertFalse("Received Location is null", received == null
            // );
            assertEquals(msg, myActivity.mTextLocation.getText().toString(),
                    test_rs);

            lm.removeTestProvider(testProvider);
        }

トレースは次のとおりです。

junit.framework.ComparisonFailure: Location Succeeded expected:<Unknown> but was:<lon=2.0
lat=1.0>
at mypackage.TestActivity.testGPS(TestActivity.java:73)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

ここでわかるように:

junit.framework.ComparisonFailure: Location Succeeded expected:<Unknown> but was:<lon=2.0 lat=1.0>.

したがって、myMain アクティビティがテストから場所を取得できないようです。

何か助けはありますか?

編集: myActivity は、テストしたいアクティビティです。73行目はアサートです。テストからアクティビティに場所を渡したいだけです。どうやってするの?

4

1 に答える 1

2

少なくとも私にとっては、これを機能させることができました。

手がかりはこちら: https://developer.android.com/training/location/location-testing.html

...公開する前にテスト コードを無効にしたり削除したりする必要はありません。

... と ...

プロバイダーの値は常に flp に設定してください。これは、ロケーション サービスが送信する Location オブジェクトに挿入するコードです。

また、更新が配信されるまでの時間を与える必要があることもわかりました。

だから、これが私が最終的に得たものです:

public void testGPS() {
    LocationManager lm = (LocationManager) mActivity
        .getSystemService(Context.LOCATION_SERVICE);

    lm.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
    lm.setTestProviderStatus(LocationManager.GPS_PROVIDER, 
                             LocationProvider.AVAILABLE,
                             null, System.currentTimeMillis());

    Location location = new Location(LocationManager.GPS_PROVIDER);
    location.setLatitude(1.0);
    location.setLongitude(2.0);
    location.setTime(System.currentTimeMillis());
    lm.setTestProviderLocation(LocationManager.GPS_PROVIDER, location);

    try {
        Thread.sleep(2000);
    } catch(InterruptedException e) {
    }
}
于 2014-04-27T13:05:10.680 に答える