Ich habe eine Fragment-Klasse geschrieben, die an einem bestimmten Punkt überprüft, bevor Sie etwas ausführen isResumed()
. Ich möchte Tests schreiben, die sicherstellen, dass dieser Code ausgeführt wird. In meinen Testfällen, die von ActivityUnitTestCase
abgeleitet sind, scheint isResumed()
jedoch immer false
zurückzugeben. Gibt es eine Möglichkeit, in einem solchen Test true
zurückgeben? Ich verwende die Fragmentklassen der Support-Bibliothek.Wie wird isResumed() wahr für ein Fragment in einem ActivityUnitTestCase zurückgegeben?
Hier ist ein Beispiel-Test, der ähnlichen Code verwendet, was meine realen Tests verwenden, und demonstriert das Problem. testIsResumed()
schlägt immer fehl, weil isResumed()
falsch ist, trotz onStart()
und onResume()
sowohl die Aktivität genannt zu haben, und das Fragment, und liberale Verwendung von waitForIdleSync()
:
public class FragmentIsResumedTest
extends ActivityUnitTestCase<FragmentIsResumedTest.TestActivity> {
public static class TestFragment
extends android.support.v4.app.Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return new LinearLayout(getContext());
}
}
public static class TestActivity
extends android.support.v4.app.FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new LinearLayout(this));
}
}
public FragmentIsResumedTest() {
super(TestActivity.class);
}
public void testIsResumed() {
startActivity(
new Intent(
getInstrumentation().getTargetContext(),
TestActivity.class),
null, null);
getInstrumentation().waitForIdleSync();
TestActivity activity = getActivity();
TestFragment fragment = new TestFragment();
fragment.onCreate(null);
getInstrumentation().callActivityOnStart(activity);
activity.getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, fragment, "FragmentTag")
.commit();
getInstrumentation().callActivityOnResume(activity);
fragment.onStart();
fragment.onResume();
getInstrumentation().waitForIdleSync();
activity.getSupportFragmentManager().executePendingTransactions();
getInstrumentation().waitForIdleSync();
assertTrue(fragment.isResumed());
}
}
Wie kann ich isResumed()
gilt für meine Fragment in Unit-Tests machen, die von erweitern ActivityUnitTestCase
?