如何在 Android 测试中创建模拟服务? [英] How do I create a mock service in an Android test?

查看:31
本文介绍了如何在 Android 测试中创建模拟服务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a service (lets call it A) and it relies on services B and C.

我想对 A 进行单元测试,因此我希望捕获从服务发出的任何意图,这些意图将启动 B 或 C,并将结果替换为服务的模拟实例.但是,Android 的测试设置似乎没有明显的实现方式.

I want to unit test A, so I would ideally like to capture any intents emitted from the service that would start B or C and replace the results with a mock instance of the services. However, Android's test setup doesn't seem to have an obvious way of implementing this.

Espresso 意图似乎与此最接近,但它似乎并未涵盖与服务的绑定.有人知道怎么做吗?

Espresso intents seems to be the nearest to this but it doesn't seem to cover binding to a service. Does anyone know how to do this?

A 正在通过诸如...之类的代码获取 B 和 C 的活页夹.

A is getting a binder to B and C via code like...

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;
    }
...

推荐答案

我没试过,但我认为你可以使用 PowerMock

I did not try it, but I think you can do what you want using PowerMock

B myMock = PowerMockito.mock(B.class);
PowerMockito.whenNew(B.class).withAnyArguments().doReturn(myMock)

参考文献

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆