Java 如何测试远程android aidl服务

Java 如何测试远程android aidl服务,java,android,robolectric,Java,Android,Robolectric,我有一个与远程android服务交互的小应用程序。我想在单元测试中模拟该服务。我使用和JUnit作为其他测试用例和影子,但我不知道如何处理远程服务 使用与实际服务相同的包创建和启动测试服务,并使用相同的aidl导出方法,是否足够 由于我没有该服务的代码,我假设我不能使用roblectric,这需要实际的类 非常感谢。我将使用它创建接口的模拟,然后在测试中将该实例传递给代码。您还可以在测试代码中手动创建该接口的实现并使用它 因此,您必须自己进行模拟,您要测试的代码必须使用某种形式的依赖项注入来获取

我有一个与远程
android
服务交互的小应用程序。我想在单元测试中模拟该服务。我使用和
JUnit
作为其他测试用例和影子,但我不知道如何处理远程服务

使用与实际服务相同的包创建和启动测试服务,并使用相同的
aidl
导出方法,是否足够

由于我没有该服务的代码,我假设我不能使用
roblectric
,这需要实际的类

非常感谢。

我将使用它创建接口的模拟,然后在测试中将该实例传递给代码。您还可以在测试代码中手动创建该接口的实现并使用它


因此,您必须自己进行模拟,您要测试的代码必须使用某种形式的依赖项注入来获取对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);
    }
}

我想你的链接断了。你是在测试远程服务还是正在与远程android服务交互的小应用程序?如果您正在测试该应用程序,我将首先对一个界面进行编码。所有对远程服务的调用都应该通过接口完成。你的小应用程序将有一个实际调用远程服务的接口实现。您的测试包将有第二个实现,模拟从远程服务返回的信息。每个测试都可以配置一些测试包实现所使用的内存中的备份数据。我在android中没有这样做,但在其他java应用程序中使用了spring,因此我不确定确切的解决方案。你找到解决方案了吗?我们之前提出的最好的测试方法是“AIDL要么工作,要么不工作,不需要测试”(现在测试AIDL背后的“服务”…这是一个完全不同的问题。)我很好奇,看看什么是blackbox测试AIDL服务的可行方法测试客户端应用程序呢?