Я новичок в разработке Android, а также в разработке, основанном на тестах. Я хочу написать модульные тесты для следующей ListActivity:
public class TrendsMainActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
String[] list_items = getResources().getStringArray(R.array.trend_menu_names);
setListAdapter(new ArrayAdapter<String>(this, R.layout.main, list_items));
}
@Override
protected void onListItemClick(ListView listView, View view, int position, long id)
{
Intent intent = null;
switch(position)
{
case 0:
intent = new Intent(this, TrendingActivity.class);
break;
case 1:
intent = new Intent(this, SearchActivity.class);
break;
case 2:
intent = new Intent(this, TimelineActivity.class);
break;
}
if(intent != null)
{
startActivity(intent);
}
else
{
Log.e(getClass().getSimpleName(), "There was an error retrieving request.");
}
}}
Я просмотрел всю документацию, которую я могу найти, но я не могу понять, как проверить это действие. Метод onListItemClick не завершен, но он дает представление о том, чего я хочу выполнить. Я хочу протестировать щелчок по первому элементу в ListView и проверить, запускается ли правильная активность.
Как я могу это сделать?
Изменить: мне нужен мой тест "click" для элемента в ListView. Затем я хочу утверждать, что начатая активность - это правильная деятельность (например, нажатие элемента ListView 0 запускает функцию TrendingActivity)
Я должен сказать, что если вы применяли TDD, вы должны были начать писать тесты, а не приложение.
В любом случае, Руководство по тестированию приложений для Android содержит в главе 3 два примера, которые в совокупности могут дать вам решение, которое вы ищете. Идея состоит в том, чтобы использовать ActivityMonitor, чтобы убедиться, что ожидаемая активность была запущена.
@UiThreadTest
public void testListItemClickStartsActivity() {
final Instrumentation inst = getInstrumentation();
final IntentFilter intentFilter = new IntentFilter();
// here add conditions to your filter, i.e. intentFilter.addAction()
ActivityMonitor monitor = inst.addMonitor(intentFilter, null, false);
assertEquals(0, monitor.getHits());
// here perform desired click on list
monitor.waitForActivityWithTimeout(5000);
assertEquals(1, monitor.getHits());
inst.removeMonitor(monitor);
}