我有一個小應用程序,與遠程android
服務交互。我想在單元測試中嘲笑這項服務。我用Robolectric和JUnit
其他測試用例和陰影,但我想不出如何處理遠程服務。如何測試遠程Android AIDL服務
是否有足夠的創建和使用相同的封裝,使用相同aidl
真正的服務和導出方法開始測試服務?
由於我沒有該服務的代碼,我假設我不能使用Robolectric
的ShadowService,這需要實際的類在那裏。
非常感謝。
我有一個小應用程序,與遠程android
服務交互。我想在單元測試中嘲笑這項服務。我用Robolectric和JUnit
其他測試用例和陰影,但我想不出如何處理遠程服務。如何測試遠程Android AIDL服務
是否有足夠的創建和使用相同的封裝,使用相同aidl
真正的服務和導出方法開始測試服務?
由於我沒有該服務的代碼,我假設我不能使用Robolectric
的ShadowService,這需要實際的類在那裏。
非常感謝。
我會用Mockito創建接口的模擬,然後將該實例傳遞給你的代碼在你的測試。您也可以在測試代碼中手動創建該接口的實現並使用它。
所以你必須自己去嘲笑,你想要測試的代碼使用某種形式的依賴注入來獲取對aidl接口的引用是很重要的,所以你可以在你的測試中傳遞你自己的模擬。
如果你想要寫服務的話,你可以使用針對的Mockito behavior.If要在實際設備上測試您的服務嘲諷服務單元測試,那麼這是你怎麼能與您的服務進行連接。
@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);
}
}
我認爲您的鏈接已損壞。 – PunDefeated
您正在測試遠程服務還是與遠程Android服務交互的小應用程序?如果您正在測試應用程序,我將開始編碼到一個界面。所有對遠程服務的調用都應該通過接口完成。 你的小應用程序將具有實際調用遠程服務的接口的實現。您的測試軟件包將有第二個實現模擬從遠程服務返回的信息。 每個測試可以配置內存中的數據有些來頭所使用的測試包的實現。 –
我沒有做android系統中這樣的事情,但有與其他Java應用程序春天,所以我不能確定一個確切的解決方案。 –