Come posso creare un test case Android JUnit che testa il contenuto di un Intento generato all'interno di un'attività?Come posso testare un intent lanciato/inviato da un'attività?
Ho un'attività che contiene una finestra EditText e quando l'utente ha terminato di immettere i dati richiesti, l'attività avvia un Intent su un IntentService che registra i dati e continua con il processo dell'applicazione. Qui è la classe che voglio provare, l'OnEditorActionListener/PasscodeEditorListener viene creato come una classe a parte:
public class PasscodeActivity extends BaseActivity {
EditText m_textEntry = null;
PasscodeEditorListener m_passcodeEditorListener = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.passcode_activity);
m_passcodeEditorListener = new PasscodeEditorListener();
m_textEntry = (EditText) findViewById(R.id.passcode_activity_edit_text);
m_textEntry.setTag(this);
m_textEntry.setOnEditorActionListener(m_passcodeEditorListener);
}
@Override
protected void onPause() {
super.onPause();
/*
* If we're covered for any reason during the passcode entry,
* exit the activity AND the application...
*/
Intent finishApp = new Intent(this, CoreService.class);
finishApp.setAction(AppConstants.INTENT_ACTION_ACTIVITY_REQUESTS_SERVICE_STOP);
startService(finishApp);
finish();
}
}
class PasscodeEditorListener implements OnEditorActionListener{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
PasscodeActivity activity = (PasscodeActivity) v.getTag();
boolean imeSaysGo = ((actionId & EditorInfo.IME_ACTION_DONE)!=0)?true:false;
boolean keycodeSaysGo = ((null != event) &&
(KeyEvent.ACTION_DOWN == event.getAction()) &&
(event.getKeyCode() == KeyEvent.KEYCODE_ENTER))?true:false;
if (imeSaysGo || keycodeSaysGo){
CharSequence seq = v.getText();
Intent guidEntry = new Intent(activity, CoreService.class);
guidEntry.setAction(AppConstants.INTENT_ACTION_PASSCODE_INPUT);
guidEntry.putExtra(AppConstants.EXTRA_KEY_GUID, seq.toString());
activity.startService(guidEntry);
return true;
}
return false;
}
}
Come posso intercettare i due possibili Intenti in uscita generati dalle attività e verificare il loro contenuto?
Grazie
Stai usando il simulatore? Forse mi manca qualcosa, ma non puoi semplicemente testarlo in questo modo? – Nick
Ho usato sia il simulatore che il telefono, anche se non credo che ci dovrebbe essere una differenza. Ho visto un certo numero di modi per iniettare Intents in ogni particolare attività sotto test, ma non in molti modi di guardare l'output. Ho visto un altro post che hanno impostato ContextWrapper e intercettato la chiamata a "startService()". Funziona per la prima chiamata, ma non per le chiamate successive. Un'attività può lanciare più intenti senza chiudere, sono interessato a vederli/testarli tutti. –