2013-07-30 15 views
8

Sto scrivendo unit test con Robolectric. La configurazione è simile arobolectric 2 - crea attività sotto test con intento

@RunWith(RobolectricTestRunner.class) 
public class MiAirlineActivityTest { 
    @Before 
    public void setUpFor() { 
     Intent intent = new Intent(HOW_TO_PASS_CONTEXT_HERE, MiAirlineActivity.class); 
     intent.putExtra(EMPLOYEEID_EXTRA, "username"); 

     miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class) 
           .withIntent(intent).start().get(); 
    } 
} 

Come passare il contesto durante la creazione del nuovo intent. Ho seguito l'esempio dalla domanda this.

Ci @ Davide dice,

"... i needed to give a Context and the class of the Activity it was being sent to"

Esattamente come posso farlo?

Nota: non contrassegnarlo come duplicato della domanda collegata sopra. Sto facendo una nuova domanda poiché non ho potuto aggiungere commenti lì.

+0

possibile duplicato del [robolectric 2 - creare attività con l'intento] (http://stackoverflow.com/questions/17195761/robolectric-2-create-activity-with-intent) – tir38

risposta

0
miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class).create().get(); 
Intent intent = new Intent(); 
intent.putExtra(EMPLOYEEID_EXTRA, "username"); 
miAirlineActivity.setIntent(intent); 
miAirlineActivity.onCreate(new Bundle()); 

Questo lancerà la vostra attività con l'intento desiderato

+0

grazie @ user2483079 , ma la soluzione sta dando errore: 'testSetBasketForExistingSeatWhoHasDeferredPurchases (com.miairline.activities.MiAirlineActivityTest) Tempo trascorso: 1.375 secondi <<< ERRORE! java.lang.NullPointerException \t a com.miairline.activities.MiAirlineActivity.onCreate (MiAirlineActivity.java:540) ' questo è il punto in cui il codice è chiamato getIntent() e l'intento è nullo. – vikas

8

Prova questa

Intent intent = new Intent(Robolectric.getShadowApplication().getApplicationContext(), 
       MiAirlineActivity.class); 
2

Costruire la vostra attività con l'intento

Intent intent = new Intent(HOW_TO_PASS_CONTEXT_HERE,MiAirlineActivity.class); 
intent.putExtra(EMPLOYEEID_EXTRA, "username"); 
iAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class).withIntent(intent).create().get(); 

sguardo ai documenti roboelectric here

1

Intento intento = nuovo intento (ShadowApplication.getInstance(). GetApplicationContext(), Activity.class);

+2

Si prega di formattare il codice e aggiungere una spiegazione per aiutare a spiegare il beneficio di questa risposta rispetto ad altri. – OhBeWise

0

Non è necessario creare il contesto e la classe di attività di destinazione utilizzando il costruttore. Prova questo:

@Before 
public void setUpFor() { 
    Intent intent = new Intent(); 
    intent.putExtra(EMPLOYEEID_EXTRA, "username"); 

    miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class) 
          .withIntent(intent).start().get(); 
} 
Problemi correlati