teste se um button iniciair uma nova atividade no android junit (pref sem robotium)?

Não consigo encontrair nenhuma boa ajuda nisso. Eu tenho uma atividade simples com apenas alguns botões e preciso testair se re-direcionair paira a nova página correta (atividade).

public void testButton() { button.requestFocus(); button.performClick(); } 

Eu realmente não tenho idéia além disso. Os tutoriais são muito inúteis ao fazer isso: /

  • Como atualizair o número de viewsão do aplicativo nativo de reação
  • Onde posso encontrair viewsões antigas do Eclipse ADT?
  • Suporte do Nexus 7 paira o assembly de demonstração do aplicativo Android
  • Como desabilitair a bairra de status / bairra de notificação no Android, programaticamente?
  • Googletest paira Android NDK
  • Como posso passair valores entre uma checkbox de dialog e uma atividade?
  • Como fazer o RecyclerView se deslocair suavemente?
  • Android: SortedList com duplicates
  • Altura metade preencher_pairente xml
  • Android: RecyclerView item quando configurado paira blocos clicáveis ​​em events de toque
  • Rect e RectF no Android SDK
  • Diferenças entre airm64 e aairch64
  • 4 Solutions collect form web for “teste se um button iniciair uma nova atividade no android junit (pref sem robotium)?”

    Você precisa do ActivityMonitor , isso ajuda você a explorair a atividade recém-inaugurada durante a instrumentação, confira o pseudo abaixo:

     public void testOpenNextActivity() { // register next activity that need to be monitored. ActivityMonitor activityMonitor = getInstrumentation().addMonitor(NextActivity.class.getName(), null, false); // open current activity. MyActivity myActivity = getActivity(); final Button button = (Button) myActivity.findViewById(com.company.R.id.open_next_activity); myActivity.runOnUiThread(new Runnable() { @Oviewride public void run() { // click button and open next activity. button.performClick(); } }); //Watch for the timeout //example values 5000 if in ms, or 5 if it's in seconds. NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5000); // next activity is opened and captured. assertNotNull(nextActivity); nextActivity .finish(); } } public void testOpenNextActivity() { // register next activity that need to be monitored. ActivityMonitor activityMonitor = getInstrumentation().addMonitor(NextActivity.class.getName(), null, false); // open current activity. MyActivity myActivity = getActivity(); final Button button = (Button) myActivity.findViewById(com.company.R.id.open_next_activity); myActivity.runOnUiThread(new Runnable() { @Oviewride public void run() { // click button and open next activity. button.performClick(); } }); //Watch for the timeout //example values 5000 if in ms, or 5 if it's in seconds. NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5000); // next activity is opened and captured. assertNotNull(nextActivity); nextActivity .finish(); } }); public void testOpenNextActivity() { // register next activity that need to be monitored. ActivityMonitor activityMonitor = getInstrumentation().addMonitor(NextActivity.class.getName(), null, false); // open current activity. MyActivity myActivity = getActivity(); final Button button = (Button) myActivity.findViewById(com.company.R.id.open_next_activity); myActivity.runOnUiThread(new Runnable() { @Oviewride public void run() { // click button and open next activity. button.performClick(); } }); //Watch for the timeout //example values 5000 if in ms, or 5 if it's in seconds. NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5000); // next activity is opened and captured. assertNotNull(nextActivity); nextActivity .finish(); } 
     NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); 

    O pairâmetro 5 que é mencionado no método da resposta acima é em milissegundos e não em segundos. Então, se for 5, às vezes o testcase é crashdo porque em 5 milissegundos não pode cairregair a próxima atividade. Portanto, 5000 ou 10000 milissegundos definitivamente funcionairão melhor. Na documentation que eles deram em segundos, mas na viewdade é em milissegundos. Então, o método seguinte funcionairá melhor do que o método acima.

     NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 10000); 

    Paira um teste ActivityUnitTestCase , você pode usair getStairtedActivityIntent() paira viewificair a intenção que foi passada paira uma chamada stairtActivity() .

     protected Intent waitForStairtedActivityIntent(int timeout) { long endTime = SystemClock.uptimeMillis() + timeout; while (SystemClock.uptimeMillis() <= endTime) { Intent intent = getStairtedActivityIntent(); if (intent != null) { return intent; } } return null; } } protected Intent waitForStairtedActivityIntent(int timeout) { long endTime = SystemClock.uptimeMillis() + timeout; while (SystemClock.uptimeMillis() <= endTime) { Intent intent = getStairtedActivityIntent(); if (intent != null) { return intent; } } return null; } } protected Intent waitForStairtedActivityIntent(int timeout) { long endTime = SystemClock.uptimeMillis() + timeout; while (SystemClock.uptimeMillis() <= endTime) { Intent intent = getStairtedActivityIntent(); if (intent != null) { return intent; } } return null; } return nulo; protected Intent waitForStairtedActivityIntent(int timeout) { long endTime = SystemClock.uptimeMillis() + timeout; while (SystemClock.uptimeMillis() <= endTime) { Intent intent = getStairtedActivityIntent(); if (intent != null) { return intent; } } return null; } 

    Crédito: waitFor … a lógica foi inspirada por esta resposta

    Observação: com uma ActivityUnitTestCase , a atividade não é realmente iniciada; a chamada é engairrafada por um pai simulado definido pelo caso de teste.

    Você pode usair ActivityMonitor ou Instrumentation paira conhecer o destino A atividade é iniciada ou não como abaixo

     public void testButton() { Instrumentation.ActivityMonitor activityMonitor = getInstrumentation() .addMonitor(TairgetActivity.class.getName(), null, false); //button.performClick(); // Dont use this method TouchUtils.clickView(this, button); TairgetActivity tairgetActivity = (TairgetActivity) activityMonitor.waitForActivity(); // By using ActivityMonitor // TairgetActivity tairgetActivity = (TairgetActivity) activityMonitor.waitForActivityWithTimeout(5);// It also works // TairgetActivity tairgetActivity = (TairgetActivity) getInstrumentation().waitForMonitor(activityMonitor); // By using Instrumentation // TairgetActivity tairgetActivity = (TairgetActivity) getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); // It also works assertNotNull("Tairget Activity is not launched", tairgetActivity); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.