簡體   English   中英

如何測試遠程android aidl服務

[英]How to test remote android aidl service

我有一個與遠程android服務交互的小應用程序。 我想在單元測試中模擬該服務。 我將RobolectricJUnit用於其他測試用例和陰影,但我無法想象如何處理遠程服務。

是否足以使用相同的包創建和啟動測試服務,使用相同的aidl實際服務和導出方法?

由於我沒有該服務的代碼,我認為我不能使用RobolectricShadowService ,它需要實際的類。

非常感謝。

我會使用Mockito創建一個接口模擬,然后將該實例傳遞給測試中的代碼。 您還可以在測試代碼中手動創建該接口的實現並使用它。

因此,您必須自己進行模擬,並且您希望測試的代碼使用某種形式的依賴注入來獲取對aidl接口的引用非常重要,因此您可以在測試中傳遞自己的模擬。

如果您想為服務編寫單元測試,那么您可以使用Mockito來模擬服務行為。如果您想在真實設備上測試您的服務,那么這就是您可以如何連接您的服務。

@RunWith(AndroidJUnit4.class)
public classRemoteProductServiceTest {
    @Rule
    public final ServiceTestRule mServiceRule = new ServiceTestRule();
    @Test
    public void testWithStartedService() throws TimeoutException {
        mServiceRule.startService(
                new Intent(InstrumentationRegistry.getTargetContext(), ProductService.class));
        //do something
    }
    @Test
    public void testWithBoundService() throws TimeoutException, RemoteException {
        IBinder binder = mServiceRule.bindService(
                new Intent(InstrumentationRegistry.getTargetContext(), ProductService.class));
        IRemoteProductService iRemoteProductService = IRemoteProductService.Stub.asInterface(binder);
        assertNotNull(iRemoteProductService);
        iRemoteProductService.addProduct("tanvi", 12, 12.2f);
     assertEquals(iRemoteProductService.getProduct("tanvi").getQuantity(), 12);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM