Jul*_*les 9 tdd junit android unit-testing android-service
试图编写我的第一个Android-by-TDD应用程序(我已经编写了一些没有TDD的小型Android应用程序,因此熟悉环境),但我似乎无法理解如何编写我的第一个测试.
场景:
我有一个活动,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());
}
}
Run Code Online (Sandbox Code Playgroud)
在TasksActivity中的onCreate()方法中,我有:
startService(new Intent(this, TasksService.class));
Run Code Online (Sandbox Code Playgroud)
我也试过了
getBaseContext().startService(new Intent(this, TasksService.class));
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下都不会调用我的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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2716 次 |
| 最近记录: |