2012-05-23 9 views
5

Questo è un frammento della mia attività:Come posso prendere in giro il Contesto usando Mockito e Robolectric?

public class Search extends Activity 
{ 
    private String TAG = "SEARCH"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.search); 
     Log.d(TAG, "About to call initialastion"); 
    //  new InitialisationTask(this).execute(); 
    } 
} 

Con la linea di cui sopra commentata, posso felicemente creare ed eseguire unit test in questo modo:

@RunWith(RobolectricTestRunner.class) 
public class SearchTest { 
    private Search searchActivity; 
    private Button searchButton; 
    private Button clearButton; 
    private Button loginButton; 
    private Button registerButton; 
    private EditText searchEditText; 

    @Before 
    public void setUp() throws Exception { 
     searchActivity = new Search(); 
     searchActivity.onCreate(null); 

     searchButton = (Button) searchActivity.findViewById(R.id.btnPlateSearch); 
     clearButton = (Button) searchActivity.findViewById(R.id.btnClearSearch); 
     loginButton = (Button) searchActivity.findViewById(R.id.btnLogin); 
     registerButton = (Button) searchActivity.findViewById(R.id.btnRegister); 
     searchEditText = (EditText) searchActivity.findViewById(R.id.editTextInputPlate); 
    } 


    @Test 
    public void assertSearchButtonHasCorrectLabel() 
    { 
     assertThat((String) searchButton.getText(), equalTo("Search")); 
    } 
} 

Tuttavia, se il commento dalla riga new InitialisationTask(this).execute(); in la mia attività, i miei test iniziano a fallire, molto probabilmente a causa del riferimento a this.

Qual è l'approccio migliore per deridere il contesto?

ho provato ad aggiungere contextMock = mock(Context.class); nel mio setUp() però io non sono sicuro di come posso impostare questa finta "in" i searchActivity

Grazie

+0

Puoi condividere il codice del vostro compito? –

risposta

4

per ottenere il contesto dell'attività o di applicazione è possibile uso:

Robolectric.getShadowApplication().getApplicationContext(); 

Per esempio:

Context context = Robolectric.getShadowApplication().getApplicationContext(); 

Adesso usa la variabile di contesto.

+0

Nota questa è una risposta per Robolectric 2.x e precedenti. –

9

Per robolectric 3.0, per ottenere l'oggetto Context si utilizza semplicemente:

RuntimeEnvironment.application.getApplicationContext(); 

Nel codice di cui sopra, non c'è bisogno di creare in modo esplicito l'oggetto attività e chiamare è il metodo onCreate(). Robolectric può impostare l'attività per voi usando:

searchActivity = Robolectric.setupActivity(SearchTest.class); 
2

Sto usando Robolectric 3.2. Questo è quello che ho usato:

ShadowApplication.getInstance().getApplicationContext();

Problemi correlati