AndroidX Test 包含一组可与 AndroidJUnitRunner 一起使用的 JUnit 规则。JUnit 规则提供了更大的灵活性,并减少了测试中所需的样板代码。例如,它们可用于启动特定活动。
ActivityScenarioRule
此规则提供了对单个活动的函数测试。该规则在每个使用 @Test
注释的测试之前启动选定的活动,以及在任何使用 @Before
注释的方法之前。该规则在测试完成后以及所有使用 @After
注释的方法完成后终止活动。要访问测试逻辑中的给定活动,请将回调运行程序提供给 ActivityScenarioRule.getScenario().onActivity()
。
以下代码片段演示了如何将 ActivityScenarioRule
融入您的测试逻辑
Kotlin
@RunWith(AndroidJUnit4::class.java) @LargeTest class MyClassTest { @get:Rule val activityRule = ActivityScenarioRule(MyClass::class.java) @Test fun myClassMethod_ReturnsTrue() { activityRule.scenario.onActivity { … } // Optionally, access the activity. } }
Java
public class MyClassTest { @Rule public ActivityScenarioRule<MyClass> activityRule = new ActivityScenarioRule(MyClass.class); @Test public void myClassMethod_ReturnsTrue() { ... } }
ServiceTestRule
此规则提供了一种简化的机制,可在测试之前启动您的服务,并在测试之前和之后关闭它。您可以使用其中一个辅助方法启动或绑定服务。它在测试完成后以及所有使用 @After
注释的方法完成后自动停止或解除绑定。
Kotlin
@RunWith(AndroidJUnit4::class.java) @MediumTest class MyServiceTest { @get:Rule val serviceRule = ServiceTestRule() @Test fun testWithStartedService() { serviceRule.startService( Intent(ApplicationProvider.getApplicationContext<Context>(), MyService::class.java)) // Add your test code here. } @Test fun testWithBoundService() { val binder = serviceRule.bindService( Intent(ApplicationProvider.getApplicationContext(), MyService::class.java)) val service = (binder as MyService.LocalBinder).service assertThat(service.doSomethingToReturnTrue()).isTrue() } }
Java
@RunWith(AndroidJUnit4.class) @MediumTest public class MyServiceTest { @Rule public final ServiceTestRule serviceRule = new ServiceTestRule(); @Test public void testWithStartedService() { serviceRule.startService( new Intent(ApplicationProvider.getApplicationContext(), MyService.class)); // Add your test code here. } @Test public void testWithBoundService() { IBinder binder = serviceRule.bindService( new Intent(ApplicationProvider.getApplicationContext(), MyService.class)); MyService service = ((MyService.LocalBinder) binder).getService(); assertThat(service.doSomethingToReturnTrue()).isTrue(); } }
其他资源
有关在 Android 测试中使用 JUnit 规则的更多信息,请参阅以下资源。
文档
- 测试您的片段 指南,用于孤立地测试片段。
- 测试您的 Compose 布局,用于测试使用 Compose 制作的 UI。
示例
- BasicSample:
ActivityScenarioRule
的简单用法。