2016-03-05 15 views
5

Tôi đang cố gắng để kiểm tra dịch vụ không liên kết cơ bản với khuôn khổ thư viện kiểm tra hỗ trợ: http://developer.android.com/tools/testing-support-library/index.htmlKhông thể bắt đầu dịch vụ không liên kết bên trong Android JUnit 4 thử nghiệm instrumented

LocalService.java:

public class LocalService extends Service { 
@Override 
public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

LocalServiceTest.java :

@RunWith(AndroidJUnit4.class) 
public class LocalServiceTest { 
    @Rule 
    public final ServiceTestRule mServiceRule = new ServiceTestRule(); 

    @Test 
    public void testWithUnboundService() throws TimeoutException { 
     Intent serviceIntent = 
      new Intent(InstrumentationRegistry.getTargetContext(), LocalService.class); 

     mServiceRule.startService(serviceIntent); 
    } 
} 

Khi tôi cố gắng chạy thử nghiệm, tôi nhận được sau TimeoutException:

java.util.concurrent.TimeoutException: Waited for 5 SECONDS, but service was never connected 
at android.support.test.rule.ServiceTestRule.waitOnLatch(ServiceTestRule.java:258) 
at android.support.test.rule.ServiceTestRule.bindServiceAndWait(ServiceTestRule.java:207) 
at android.support.test.rule.ServiceTestRule.startService(ServiceTestRule.java:137) 
at com.example.android.testing.ServiceTestRuleSample.LocalServiceTest.testWithBoundService(LocalServiceTest.java:71) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at android.support.test.rule.ServiceTestRule$ServiceStatement.evaluate(ServiceTestRule.java:329) 
at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:54) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:240) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729) 

Có thể thử nghiệm các loại dịch vụ như vậy với ServiceTestRule không? Nếu không, có cách nào khác thích hợp để bắt đầu và ngừng các dịch vụ sử dụng các lớp kiểm tra JUnit 4 không?

+1

Tôi đã gặp phải sự cố tương tự này. Và giải pháp là chỉ cần thực hiện onBind trả về một tham chiếu đến dịch vụ này. – PSIXO

+0

Có, cuối cùng tôi đã thực hiện nó theo cùng một cách. Thật không may, trong trường hợp này tôi phải thêm sleep() để chờ khởi tạo dịch vụ. Dù sao thì cũng cám ơn bạn! –

Trả lời

2

Hãy thử một trong

@Rule ServiceTestRule này chính thức công mServiceRule = ServiceTestRule.withTimeout (60L, TimeUnit.SECONDS);

1

này làm việc cho tôi

@Test(timeout=1000 * 60) 
public void testWithStartedService(){ 
    try { 
     mServiceRule.startService(
       new Intent(InstrumentationRegistry.getTargetContext(), UpdaterService.class)); 
    } catch (TimeoutException e) { 
     e.printStackTrace(); 
    } 
    //do something 
} 
Các vấn đề liên quan