2015-12-11 12 views
14

bir HandlerThread başlatan bir işlevi sınamak için başarısız oldu: SonraRobolectric 3.0, ben <a href="http://developer.android.com/reference/android/os/HandlerThread.html">HandlerThread</a> uzanan basit bir sınıfı <code>Job</code> var

public class Job extends HandlerThread{ 
    public Job(String name) { 
    super(name); 
    } 
    ... 
} 

, ben Job & start() almak için bir işlevi vardır bir JobUtils sınıf var o :

public JobUtils { 
    public JobUtils() { 
    } 

    // I unit test this function in my test class below 
    public Job getAndStartJob(String name) { 
     Job job = new Job(name); 
     job.start(); 
    } 
} 

benim birim testinde Robolectric 3.0 kullanmak, ben getAndStartJob(String name) işlevlerine JobUtils sınıf test tarih: Ben birim test kodu çalıştırdığınızda, ben bu Robolectric benziyor

Exception in thread "test-job” java.lang.NullPointerException 
    at org.robolectric.shadows.ShadowLooper.getMainLooper(ShadowLooper.java:70) 
    at org.robolectric.shadows.ShadowLooper.doLoop(ShadowLooper.java:85) 
    at org.robolectric.shadows.ShadowLooper.loop(ShadowLooper.java:76) 
    at android.os.Looper.loop(Looper.java) 
    at android.os.HandlerThread.run(HandlerThread.java:60) 

HandlerThread (benim kodunda job instace) başlamak ya yapmak mümkün değildir hata var

@RunWith(RobolectricTestRunner.class) 
public class TestJobUtils{ 
@Test 
public void testGetAndStartJob() { 
    JobUtils jobUtils = new JobUtils(); 

    // error here 
    jobUtils.getAndStartJob(“test-job”); 
    … 
} 
} 

Birşeyleri özledim? Bu problemden nasıl kurtuluruz?

cevap

3

RobolectricGradleTestRunner'u kullandım ve neden tüm test yöntemi gövdesini göndermediysem nedeniniz aynı değilse, benzer bir sorunla karşılaşıyorum. Benim durumumda, Robolectric'in uygulamasının (RuntimeEnvironment.application) null (NPE kaynağının) HandlerThread başlamadan önce başladığını, çünkü test yönteminin daha erken sona erdiğinden çıktığı ortaya çıkıyor.

Robolectric.flushBackgroundThreadScheduler(); 
    Robolectric.flushForegroundThreadScheduler(); 
:

Çözüm test yönteminin sonunda tüm zamanlanmış runnables beklemektir

İlgili konular