在几年前的this question中,有人建议使用特定的startService
对Context
来电进行单元测试。
现在,大约4年后,我想知道像Espresso
这样的某个框架是否无法处理此功能。
我有一个意向服务:
public class MyService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
if (/* condition */) {
/* do Something short-lasting */
}
return;
}
我的代码在onCreate()
public class ListActivity extends SomeActivityClass {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, MyService.class));
}
我的测试代码需要启动服务:
@RunWith(AndroidJUnit4.class)
public class ListActivityTest {
@Rule
public final ActivityTestRule<ListActivity> rule
= new ActivityTestRule<ListActivity>(ListActivity.class, true, false);
@Test
public void test_startService() {
Intents.init();
Context targetContext = InstrumentationRegistry.getTargetContext();
Intent showListIntent = new Intent(targetContext, ListActivity.class);
rule.launchActivity(showListIntent);
Intents.intended(IntentMatchers.hasComponent(MyService.class.getName()));
Intents.release();
}
}
我的问题是,ListActivity
的启动似乎已经完成,但框架并未等待启动服务的意图。
我尝试使用IdlingResource
,但这意味着我必须将测试代码添加到生产代码中,我不想这样做,显然:我想要启动的IntentService是一个短时间运行代码,所以记录一些关于IntentService正在运行的状态或者已经结束并将其返回到IdlingResource回调的状态不是一个选项。
有关如何查看startService
来电的任何提示?
修改
好吧,似乎Robolectric可以完全达到我想要的阴影效果。