如果您正在实现本地Service
作为您应用的组件,您可以创建检测测试以验证其行为是否正确。
AndroidX Test提供了一个 API,用于隔离测试您的Service
对象。ServiceTestRule
类是一个 JUnit 4 规则,它会在您的单元测试方法运行之前启动您的服务,并在测试完成后关闭服务。要了解有关 JUnit 4 规则的更多信息,请参阅JUnit 文档。
设置您的测试环境
在构建服务的集成测试之前,请确保按照为 AndroidX Test 设置项目中的说明配置您的项目以进行检测测试。
为服务创建集成测试
您的集成测试应编写为 JUnit 4 测试类。要了解有关创建 JUnit 4 测试类和使用 JUnit 4 断言方法的更多信息,请参阅创建检测测试类。
通过使用@Rule
注解在您的测试中创建一个ServiceTestRule
实例。
Kotlin
@get:Rule val serviceRule = ServiceTestRule()
Java
@Rule public final ServiceTestRule serviceRule = new ServiceTestRule();
以下示例显示了您可能如何为服务实现集成测试。测试方法testWithBoundService()
验证应用是否成功绑定到本地服务以及服务接口是否行为正确。
Kotlin
@Test @Throws(TimeoutException::class) fun testWithBoundService() { // Create the service Intent. val serviceIntent = Intent( ApplicationProvider.getApplicationContext<Context>(), LocalService::class.java ).apply { // Data can be passed to the service via the Intent. putExtra(SEED_KEY, 42L) } // Bind the service and grab a reference to the binder. val binder: IBinder = serviceRule.bindService(serviceIntent) // Get the reference to the service, or you can call // public methods on the binder directly. val service: LocalService = (binder as LocalService.LocalBinder).getService() // Verify that the service is working correctly. assertThat(service.getRandomInt(), `is`(any(Int::class.java))) }
Java
@Test public void testWithBoundService() throws TimeoutException { // Create the service Intent. Intent serviceIntent = new Intent(ApplicationProvider.getApplicationContext(), LocalService.class); // Data can be passed to the service via the Intent. serviceIntent.putExtra(LocalService.SEED_KEY, 42L); // Bind the service and grab a reference to the binder. IBinder binder = serviceRule.bindService(serviceIntent); // Get the reference to the service, or you can call // public methods on the binder directly. LocalService service = ((LocalService.LocalBinder) binder).getService(); // Verify that the service is working correctly. assertThat(service.getRandomInt()).isAssignableTo(Integer.class); }
其他资源
要了解有关此主题的更多信息,请咨询以下其他资源。