2012-05-23 25 views
5

Este es un fragmento de mi actividad:¿cómo puedo simular el contexto usando Mockito y 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 línea de arriba comentado, puedo crear feliz y ejecutar pruebas unitarias, así:

@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")); 
    } 
} 

Sin embargo, si yo elimine la línea new InitialisationTask(this).execute(); en mi actividad, mis pruebas comienzan a fallar, muy probablemente debido a la referencia al this.

¿Cuál es el mejor enfoque para burlarse del contexto?

me han tratado de añadir contextMock = mock(Context.class); en mi setUp() sin embargo no estoy seguro de cómo me puedo fijar este simulacro "en" los searchActivity

Gracias

+0

¿Puede compartir código de su tarea? –

Respuesta

4

Para conseguir el contexto de la actividad o aplicaciones Puede uso:

Robolectric.getShadowApplication().getApplicationContext(); 

Por ejemplo:

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

Ahora usa la variable de contexto.

+0

Tenga en cuenta que esta es una respuesta para Robolectric 2.xy anteriores. –

9

Para robolectric 3.0, para obtener el objeto de contexto se utiliza simplemente:

RuntimeEnvironment.application.getApplicationContext(); 

En el código anterior, usted no tiene que crear explícitamente el objeto de la actividad y ponerse es el método onCreate(). Robolectric puede configurar la actividad para usted usando:

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

Estoy usando Robolectric 3.2. Esto es lo que he utilizado:

ShadowApplication.getInstance().getApplicationContext();

Cuestiones relacionadas