Robolectric:测试应用程序运行时启动哪个Activity

时间:2014-09-27 08:14:07

标签: android tdd robolectric

我想使用robolectric编写一个自动化测试,确认在应用程序启动时启动给定的活动。

这将是我在Freeman和Pryce的TDD书中描述的“行走骨架”验收测试。

测试基本确认应用程序的主要意图过滤器已正确实现:

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

我知道这是一项几乎不值得做的测试,但这就是“行走骨架”测试的重点 - 而且我觉得这是值得做的。

怎么可以这样做? robolectric提供的“hello world”测试是这样的:

@Before 
public void setup()
{
    this.activity = Robolectric.buildActivity(MainActivity.class).create().get();
}
@Test
public void shouldHaveHappySmiles() throws Exception 
{
    String appName = this.activity.getString(R.string.app_name);
    assertThat(appName, equalTo("MyApp"));
}

以上运行MainActivity并测试它的属性。相反,我如何断言当应用程序启动时,它实际上会启动MainActivity

1 个答案:

答案 0 :(得分:3)

至于我,这个测试一般没有多大价值。但也许这对你的情况很重要。

我会访问`AndroidManifest&#39;并检查具体的&#39; ActivityData&#39;使用&#39; IntentFilter&#39;:

AndroidManifest appManifest = Robolectric.getShadowApplication().getAppManifest();
ActivityData activityData = appManifest.getActivityData( "<yourpackage>.MainActivity" );
List<IntentFilterData> intentFilters = activityData.getIntentFilters();
IntentFilterData data = intentFilters.get( 0 );

assertThat( data.getActions() ).contains( "android.intent.action.MAIN" );
assertThat( data.getCategories() ).contains( "android.intent.category.LAUNCHER" );

这只是示例,如果您有更多意图过滤器,请注意