2014-07-08 5 views
5

मैं एंड्रॉइड पर नौसिखिया हूं और स्पलैशस्क्रीन का परीक्षण करने पर अटक गया हूं, मूल रूप से जो मैं कर रहा हूं वह यह जांचने की कोशिश कर रहा है कि स्प्लैश स्क्रीन 3 एस के लिए रहती है। इस splashScreenएंड्रॉइड टेस्टिंग हैंडलर.postDelayed

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

के लिए कोड है और इस परीक्षण के लिए मेरे दृष्टिकोण है:

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

मैं एंड्रॉयड + Robolectric उपयोग कर रहा हूँ के परीक्षण के लिए।

मैं कुछ दिनों के लिए googling गया है, मैंने कई चीजों की कोशिश की लेकिन कोई परिणाम नहीं। मैं यूआई थ्रेड पाने की कोशिश करता हूं और इसके लिए प्रतीक्षा करता हूं। मैंने कतार प्राप्त करने के लिए शेड्यूलर की कोशिश की और देखा कि क्या कोई कार्य है या नहीं। लेकिन कोई परिणाम नहीं।

कोई सुझाव मैं नई परीक्षा ट्रिगर होने तक अपना परीक्षण कैसे कर सकता हूं?

धन्यवाद

उत्तर

7

आप कोशिश कर सकते हैं:

Robolectric.pauseMainLooper(); 
Robolectric.getUiThreadScheduler().advanceBy(intervalMs); 
Robolectric.unPauseMainLooper(); 

या, यदि आप सिर्फ runnable के नाम से जाना था:

Robolectric.runUiThreadTasksIncludingDelayedTasks(); 
+0

वह के लिए धन्यवाद एलपी, मैं बाद में जांच करूंगा! – Rabel

+0

आकर्षण जैसे महान काम –

13

में Robolectric 3.0, वे इस एपीआई अपडेट किया गया। वास्तविक संस्करण:

ShadowLooper.runUiThreadTasksIncludingDelayedTasks();

प्रयोग उदाहरण:

public class MainActivity extends AppCompatActivity { 
    ........ 

    public void finishGame() { 
     Handler h = new Handler(); 
     h.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       finish(); 
      } 
     }, 5000); 
    } 
} 

टेस्ट यह arount:

@RunWith(RobolectricTestRunner.class) 
@Config(constants = BuildConfig.class, sdk=21) 
public class MainActivityTest { 

    @Test 
    public void testFinishing() throws InterruptedException { 
     MainActivity mainActivity = new MainActivity(); 

     assertFalse(mainActivity.isFinishing()); 

     mainActivity.finishGame(); 
     ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); 

     assertTrue(mainActivity.isFinishing()); 
    } 
} 
+0

ओह! धन्यवाद :) – cVoronin

2

Robolectric 3.0 में, IuriiO के जवाब अनुवाद होगा हैं-

ShadowLooper.pauseMainLooper(); 
Robolectric.getForegroundThreadScheduler().advanceBy(intervalMs); 
ShadowLooper.unPauseMainLooper(); 
संबंधित मुद्दे