如何在Android测试中创建模拟服务?

时间:2018-06-18 13:04:03

标签: java android junit android-espresso

我有一项服务(让我们称之为A),它依赖于服务B和C.

我想对单元测试A进行单元测试,所以理想情况下我想捕获从服务中发出的任何意图,这些意图将启动B或C并用服务的模拟实例替换结果。但是,Android的测试设置似乎没有明显的实现方式。

Espresso意图似乎距离最近,但它似乎并不涵盖对服务的绑定。有谁知道怎么做?

A通过像......这样的代码获得B和C的活页夹。

Intent intent = new Intent(context, B.class);
context.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);

...

private final ServiceConnection mServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        B.BinderStub bInstance = (B.BinderStub) service;
    }
...

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用Mockito?您可以模拟任何类,而有趣的是,可以调用该类的某些方法来模拟程序动作。例如:

YourClassB myMock = Mockito.mock(YourClassB.class);
Mockito.doReturn("Whatever you want").when(YourClassB).getNewString();

检查一下您的具体情况,并告诉我。

答案 1 :(得分:0)

我没有尝试过,但是我认为您可以使用PowerMock

做您想做的事
B myMock = PowerMockito.mock(B.class);
PowerMockito.whenNew(B.class).withAnyArguments().doReturn(myMock)

参考