[英]How to test remote android aidl service
我有一個與遠程android
服務交互的小應用程序。 我想在單元測試中模擬該服務。 我將Robolectric和JUnit
用於其他測試用例和陰影,但我無法想象如何處理遠程服務。
是否足以使用相同的包創建和啟動測試服務,使用相同的aidl
實際服務和導出方法?
由於我沒有該服務的代碼,我認為我不能使用Robolectric
的ShadowService ,它需要實際的類。
非常感謝。
我會使用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.