Intereting Posts
Значки «Назад» и «Переполнение» Неправильный цвет в предустановленных устройствах после обновления до библиотеки поддержки 23.2.0 Как можно удалить «целевую точку» теневой тени Android из ее «точки касания»? Как завершить работу из класса адаптера ListView? Многоадресная рассылка на Android 2.2 Showroid () не работает Как обновить значение столбца базы данных базы данных android sqlite до значения null, используя ContentValues? LOG4J в Android Запуск нового эмулятора Intel для Android Что такое проблемы обновления и обновления приложений для Android? Статические методы или Singletons по производительности (Android)? Нужен пример, показывающий, как выполнять асинхронные HTTP-запросы Как включить глубокую привязку в приложении WebView для Android? Android-панель инструментов sherlok не показывает разделитель Как заставить GridView использовать весь экран (независимо от размера экрана)? Body.setTransform не работает внутри прослушивателя контактов (andEngine и box2d)

Тестирование JUnit для Android-приложения с фрагментами

Мое приложение для Android было создано на основе Single Activity, основанной на нескольких фрагментах. Мне нужно сделать модульное тестирование для приложения. Я могу написать тестовые модули для приложения, которое содержит все действия с использованием ActivityInstrumentationTestCase2 JUnit, но не для приложения, содержащего фрагменты. Пожалуйста, предложите способ написания тестовых примеров JUnit для фрагментов.

спасибо

Solutions Collecting From Web of "Тестирование JUnit для Android-приложения с фрагментами"

См. Android: Тестирование фрагментов

Скопировано для удовольствия чтения с изменениями, сделанными для getFragmentManager () и getSupportFragmentManager () и android: exported = "false":

Если вы хотите протестировать фрагмент изолированно, вам нужно создать тестовую функцию FragmentActivity, чтобы ваш тест мог ее использовать. Тестовая активность будет выглядеть примерно так. Не забудьте объявить его в манифесте вашего приложения:

public class TestFragmentActivity extends FragmentActivity { @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_fortests); } } 

Планировка:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/activity_test_fragment_linearlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout> 

AndroidManifest:

  ... <activity android:name="your.package.name.TestFragmentActivity" android:exported="false" /> ... 

Затем в вашем тестовом проекте вы можете создать такой класс, чтобы запустить фрагмент:

  public class FrameworkObjectsGeneratorFragmentTest extends ActivityInstrumentationTestCase2<TestFragmentActivity> { private TestFragmentActivity mActivity; public FrameworkObjectsGeneratorFragmentTest() { super(TestFragmentActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); mActivity = getActivity(); } private Fragment startFragment(Fragment fragment) { FragmentTransaction transaction = mActivity.getFragmentManager().beginTransaction(); transaction.add(R.id.activity_test_fragment_linearlayout, fragment, "tag"); transaction.commit(); getInstrumentation().waitForIdleSync(); Fragment frag = mActivity.getFragmentManager().findFragmentByTag("tag"); return frag; } public void testFragment() { FrameworkObjectsGeneratorFragment fragment = new FrameworkObjectsGeneratorFragment() { //Override methods and add assertations here. }; Fragment frag = startFragment(fragment); } } 

Метод startFragment () добавляет фрагмент, который вы указываете в ViewGroup в TestActivity.

Хорошая вещь о тестировании фрагментов, в отличие от действий, заключается в том, что вы можете расширить фрагмент, чтобы переопределить защищенные поля и методы, в которых вы можете добавлять утверждения.

ПРИМЕЧАНИЕ. Вызовите getSupportFragmentManager (), если вы используете библиотеку поддержки.