title: Android Testing Handler.postDelayed
body: <p>I'm newbie on Android and get stuck on testing a SplashScreen, basically what I'm doing is trying to test that the splash screen stays on for 3s. this is the code for the splashScreen</p>
  
  <pre><code>@Override
  protected void onStart() {
      super.onStart();
  
      new Handler().postDelayed(new Runnable() {
          @Override
          public void run() {
              Intent i = new Intent(SplashScreenActivity.this, MainActivity.class);
              startActivity(i);
              finish();
          }
      }, SPLASH_TIME_OUT);
  }
  </code></pre>
  
  <p>And this is my approach for the test:</p>
  
  <pre><code>@Test
  public void splashScreenTimerTest() throws InterruptedException {
      StopWatch timer = new StopWatch();
      timer.start();
  
      splashScreenActivityController.start();
  
      timer.stop();
      long expected = 3000L;
      assertThat(String.format("The spalash screen run for longer than expected. It should stay on for [%d] but it run for [%d]",expected,timer.getTime()),timer.getTime(),equalTo(expected));
  }
  </code></pre>
  
  <p>I'm using Android+Robolectric for testing.</p>
  
  <p>I've been googling for a couple days, I tried many things but no result at all. I try to get the UI Thread and wait for it. I tried to you scheduler to get the queue and see if there is any task there. But no result at all.</p>
  
  <p>Any suggestion how can I make my test wait until the new Activity is triggered?</p>
  
  <p>Thanks</p>