gpt4 book ai didi

android - 单元测试 Activity.startService() 调用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:40 26 4
gpt4 key购买 nike

尝试编写我的第一个 Android-by-TDD 应用程序(我已经编写了一些没有 TDD 的小型 Android 应用程序,所以熟悉环境),但我似乎无法理解如何编写我的第一次测试。

场景:

我有一个 Activity TasksActivity 和一个服务 TasksService。我需要测试 TasksActivity 是否在其 onStart() 方法中启动了 TasksService。

我写的测试是这样的:

public class ServiceControlTest extends ActivityUnitTestCase<TasksActivity>{
public ServiceControlTest() {
super(TasksActivity.class);
}

public void testStartServiceOnInit () {
final AtomicBoolean serviceStarted = new AtomicBoolean(false);
setActivityContext(new MockContext() {
@Override
public ComponentName startService(Intent service) {
Log.v("mockcontext", "Start service: " + service.toUri(0));
if (service.getComponent().getClassName().equals (TasksService.class.getName()))
serviceStarted.set(true);
return service.getComponent();
}
});
startActivity(new Intent(), null, null);
assertTrue ("Service should have been started", serviceStarted.get());
}
}

在 TasksActivity 的 onCreate() 方法中,我有:

    startService(new Intent(this, TasksService.class));

我也试过

    getBaseContext().startService(new Intent(this, TasksService.class));

但是在这两种情况下都不会调用我的 MockContext 的 startService 方法。有没有办法可以设置此方法的拦截?我真的宁愿不必开始包装基本的 Android API 来执行此类基本测试...

最佳答案

只是在评论中总结与 Brian Dupuis 的对话,问题是 MockContext 没有提供测试仪器所需的设施,以便正确调用 onCreate()。从 MockContext 切换到 ContextWrapper 解决了这个问题。

工作测试因此看起来像这样:

public void testStartServiceOnInit () {
final AtomicBoolean serviceStarted = new AtomicBoolean(false);
setActivityContext(new ContextWrapper(getInstrumentation().getTargetContext()) {
@Override
public ComponentName startService(Intent service) {
Log.v("mockcontext", "Start service: " + service.toUri(0));
if (service.getComponent().getClassName().equals ("net.meridiandigital.tasks.TasksService"))
serviceStarted.set(true);
return service.getComponent();
}
});
startActivity(new Intent(), null, null);
assertTrue ("Service should have been started", serviceStarted.get());
}

关于android - 单元测试 Activity.startService() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9294211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com