我想使用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
?
答案 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" );
这只是示例,如果您有更多意图过滤器,请注意