Тестирование 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 (), если вы используете библиотеку поддержки.