Espresso startActivity qui dépend de l'Intention
J'ai la situation suivante.
Mon activité a un fragment qui dépend d'un Objet Sérialisable. Voici mon onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyObject myObj = (MyObj) getIntent().getSerializableExtra("myobj");
if(myObj != null) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container, MyFragment.newInstance(myObj));
transaction.commit();
}
}
Mais dans mon Espresso test, j'ai simplement ne peut pas passer de l'intention à l'activité avant sa création. J'ai essayé avec setActivityIntent de plusieurs manières mais ne peux pas comprendre comment le faire fonctionner.
Voici ma dernière tentative:
import android.content.Intent;
import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.Espresso;
import android.test.ActivityInstrumentationTestCase2;
import org.junit.Before;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
public class MyActivityTest extends
ActivityInstrumentationTestCase2<MyActivity> {
private MyActivity activity;
private MyObject myObj;
public MyActivityTest() {
super(MyActivity.class);
}
@Before
protected void setUp() throws Exception {
super.setUp();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
myObj = MyObject.mockObject();
Intent i = new Intent();
i.putExtra("myobj", myObj);
setActivityIntent(i);
}
public void testName(){
Espresso.onView(withId(R.id.name)).check(matches(withText(myObj.getObjName())));
}
}
J'ai beaucoup cherché mais rien ne fonctionne. MyObject
est toujours nulle dans le test. Je pense que cela devrait être simple. Que suis-je suis absent?
- Quel message d'erreur avez-vous?
- vous n'avez pas besoin d' @Avant, parce que c'est un JUnit 3 test pas un JUnit 4 test.
- Résolu, le problème était avec ma maquette... Désolé de déranger.
- Solution de Kotlin prises à partir de ici
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir l'Intention d'être utilisé de cette façon
Vous pouvez remplacer le ActivityTestRule.getActivityIntent() méthode et de retourner l'Intention requise:
Il ne regarde pas comme vous êtes en train de commencer l'activité n'importe où.
Essayez d'appeler
getActivity()
sur la première ligne de nomtest().Cela permet de lancer l'activité que vous avez passé dans le super constructeur.
getActivity()
sur la première ligne de la méthode d'essai et dans la dernière ligne desetUp()
mais ne fonctionne pas =/