单元测试/集成测试:startService()名为

时间:2016-06-06 09:07:40

标签: android unit-testing android-testing android-espresso android-intentservice

在几年前的this question中,有人建议使用特定的startServiceContext来电进行单元测试。

现在,大约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可以完全达到我想要的阴影效果。

0 个答案:

没有答案