【问题标题】:Android unit testing verify that OnCreate sends intent and that fragment shownAndroid 单元测试验证 OnCreate 发送意图和显示的片段
【发布时间】:2013-09-13 23:19:07
【问题描述】:

我有一个 Android 应用,其中启动的 Activity 会启动一个 IntentService。我想知道如何测试这个意图是否被发送。我正在使用 Robolectric,但我才刚刚开始,所以如果需要我可以将其移除。

我的 onCreate 还根据是否加载了某些数据来显示一个片段。这来自单例。我想知道如何测试该片段是否显示。

【问题讨论】:

    标签: android unit-testing junit robolectric


    【解决方案1】:

    测试ServiceIntents

    要测试IntentService,您的测试可以使用Robolectric.getShadowApplication().getNextStartedService(),它将返回用于启动服务的Intent 对象。然后,您可以对 Intent 执行断言以验证操作是否符合预期。

    @Test
    public void shouldStartMyIntentService() throws Exception {
        Intent serviceIntent = Robolectric.getShadowApplication().getNextStartedService();
        assertEquals("MY_INTENT_ACTION", serviceIntent.getAction());
    }
    

    验证Fragment 是否可见

    验证片段是否可见的一种简单方法是对片段中的视图执行findViewById Activity

    @Test
    public void shouldShowPuppyFragment() throws Exception {
        Activity activity = Robolectric.buildActivity(PuppyAndKittenActivity.class).create().visible().get();
        assertEquals(View.VISIBLE, activity.findViewById(R.id.puppies).getVisibility());
        assertNull(activity.findViewById(R.id.kittens));
    }
    

    旁注...

    我会强烈推荐立即使用 Robolectric 2.2-SNAPSHOT 版本。自 2.1.1 发布以来,已经发生了很多非常好的变化,我不确定什么时候会发布新版本。 Robolectric 是一项持续不断的工作,并且会定期改进。

    【讨论】:

    • 我 90% 确定我使用的是 2.2-SNAPSHOT,但我会仔细检查。就第一个而言,这是否适用于我在 OnCreate 期间触发的 Intent?
    • 太棒了!当令人敬畏的变化打破了 Android 世界的独特角落并因此错误得到更快修复时,使用最新和最伟大的人有助于收紧反馈循环。
    猜你喜欢
    • 2020-06-27
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2010-09-30
    • 2015-07-23
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多