【问题标题】:Testing GoogleApiClient in Android Instrumentation TestCase在 Android Instrumentation TestCase 中测试 GoogleApiClient
【发布时间】:2015-12-28 09:59:48
【问题描述】:

我正在使用 ActivityInstrumentationTestCase2 编写活动测试用例。 在这个活动中,我使用 GoogleApiClient 来获取用户的位置。我想要 GoogleApiClient 已连接的断言。

这是我写的测试用例

@RunWith(AndroidJUnit4.class)
public class SplashActivityTest
extends ActivityInstrumentationTestCase2<SplashScreenActivity>{

private SplashScreenActivity splashScreenActivity;
private TextView messageText;
private ProgressBar progressBar;
private boolean isLocationCallbackCalled;
private long LOCATION_TIMEOUT = 10000;
private GoogleApiClient mGoogleApiClient;


public SplashActivityTest() {
 super(SplashScreenActivity.class);
}

@Before public void setUp() throws Exception {
super.setUp();

injectInstrumentation(InstrumentationRegistry.getInstrumentation());
splashScreenActivity = getActivity();
messageText = (TextView) splashScreenActivity.findViewById(R.id.textView2);
progressBar = (ProgressBar) splashScreenActivity.findViewById(R.id.progressBar);

mGoogleApiClient =
    new GoogleApiClient.Builder(getInstrumentation().getContext())
        .addApi(LocationServices.API)
        .build();
mGoogleApiClient.connect();

 }

@Test public void testGoogleApiClientConnected() {
assertEquals("Google api client not connected", mGoogleApiClient.isConnected(), true);
 }
 }

但我在运行 TestCase 时遇到此错误

java.lang.IllegalArgumentException: isGooglePlayServicesAvailable should only be called with Context from your application's package. A previous call used package 'com.example.myapp' and this call used package 'com.example.myapp.test'.
at com.google.android.gms.common.zze.zzan(Unknown Source)
at com.google.android.gms.common.zze.isGooglePlayServicesAvailable(Unknown Source)
at com.google.android.gms.common.zzc.isGooglePlayServicesAvailable(Unknown Source)
at com.google.android.gms.common.api.internal.zzh$zzb.zzpt(Unknown Source)
at com.google.android.gms.common.api.internal.zzh$zzf.run(Unknown Source)

【问题讨论】:

    标签: android integration-testing junit4 google-api-client activityunittestcase


    【解决方案1】:

    我已经解决了。实际上我必须传递应用程序上下文而不是测试应用程序上下文。

    我们可以传递正在测试的应用程序的上下文,如下所示

    public class SplashActivityTest
      extends ActivityInstrumentationTestCase2<SplashScreenActivity> {
    
    private SplashScreenActivity splashScreenActivity;
    private TextView messageText;
    private ProgressBar progressBar;
    private boolean isLocationCallbackCalled;
    private long TIMEOUT_IN_MS = 10000;
    private GoogleApiClient mGoogleApiClient;
    // register next activity that need to be monitored.
    Instrumentation.ActivityMonitor homeActivityMonitor;
    
    public SplashActivityTest() {
      super(SplashScreenActivity.class);
    }
    
    @Before public void setUp() throws Exception {
      super.setUp();
      injectInstrumentation(InstrumentationRegistry.getInstrumentation());
    
      homeActivityMonitor = getInstrumentation().addMonitor(HomeScreenActivity.class.getName(), null, false);
    
      splashScreenActivity = getActivity();
      messageText = (TextView) splashScreenActivity.findViewById(R.id.textView2);
      progressBar = (ProgressBar) splashScreenActivity.findViewById(R.id.progressBar);
    
      final CountDownLatch latch = new CountDownLatch(1);
      mGoogleApiClient =
          new GoogleApiClient.Builder(splashScreenActivity).addApi(LocationServices.API)
              .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override public void onConnected(Bundle bundle) {
                  latch.countDown();
                }
    
                @Override public void onConnectionSuspended(int i) {
                  latch.countDown();
                }
              })
              .build();
      mGoogleApiClient.connect();
      latch.await();
    }
    
    @Test public void testPreconditions() {
      //Try to add a message to add context to your assertions. These messages will be shown if
      //a tests fails and make it easy to understand why a test failed
      assertNotNull("splashScreenActivity is null", splashScreenActivity);
      assertNotNull("messageText is null", messageText);
      assertNotNull("progressBar is null", progressBar);
    }
    
    @Test public void testPlayServiceVersion() {
      splashScreenActivity.runOnUiThread(new Runnable() {
        @Override public void run() {
          assertEquals("Wrong PlayService version", true,
              AppUtils.checkPlayServices(splashScreenActivity));
        }
      });
    }
    
    @Test public void testLocationRuntimePermissionsGranted() {
      getInstrumentation().runOnMainSync(new Runnable() {
        @Override public void run() {
          assertEquals("NO GPS Permission Granted", PackageManager.PERMISSION_GRANTED,
              ContextCompat.checkSelfPermission(splashScreenActivity,
                  android.Manifest.permission.ACCESS_FINE_LOCATION));
        }
      });
    }
    
    @Test public void testGoogleApiClientConnected() {
      assertEquals("Google api client not connected", true, mGoogleApiClient.isConnected());
    }
    
    @After public void tearDown() {
      getInstrumentation().removeMonitor(homeActivityMonitor);
    }
    
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 2016-05-13
      相关资源
      最近更新 更多