Ответ 1
Смотрите Android: тестирование фрагментов
Скопировано для удовольствия чтения с изменениями, сделанными для getFragmentManager() и getSupportFragmentManager() и android: exported = "false":
Если вы хотите протестировать фрагмент изолированно, вам нужно создать Test 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(), если вы используете библиотеку поддержки.