当前位置: 首页 > 工具软件 > AndroidJUnit4 > 使用案例 >

junit4 测试android,AndroidX Test 的 JUnit4 规则

卫阳炎
2023-12-01

AndroidX Test 包含需要与 AndroidJUnitRunner 一起使用的一组 JUnit 规则。JUnit 规则可提供更高的灵活性,并减少测试中所需的样板代码。

ActivityTestRule

此规则提供单个 Activity 的功能测试。被测 Activity 会在带有 @Test 注释的每个测试运行之前以及带有 @Before 注释的所有方法运行之前启动。它会在测试完成并且带有 @After 注释的所有方法结束后终止。如需在测试逻辑中访问被测的 Activity,请调用 ActivityTestRule.getActivity()。

注意:AndroidX Test 还包含一个 API ActivityScenario,它目前处于 Beta 版阶段。此 API 可在各种测试环境中运行,并在使用它的测试中提供线程安全。

我们建议您试用此 API,看看它如何帮助您推动应用 Activity 的生命周期。

以下代码段演示了如何将 ActivityTestRule 融入测试逻辑:

Kotlin

@RunWith(AndroidJUnit4::class.java)

@LargeTest

class MyClassTest {

@get:Rule

val activityRule = ActivityTestRule(MyClass::class.java)

@Test fun myClassMethod_ReturnsTrue() { ... }

}Java

@RunWith(AndroidJUnit4.class)

@LargeTest

public class MyClassTest {

@Rule

public ActivityTestRule activityRule =

new ActivityTestRule(MyClass.class);

@Test

public void myClassMethod_ReturnsTrue() { ... }

}

ServiceTestRule

此规则提供了一种简化的机制,用于在测试之前启动服务以及在测试之后关闭服务。它还可以保证在启动服务或绑定到服务时成功连接该服务。您可以使用某个辅助程序方法启动或绑定服务。它会在测试完成并且带有 @After 注释的所有方法结束后自动停止或取消绑定。

注意:此规则不支持 IntentService。这是因为,服务会在 IntentService.onHandleIntent(Intent) 完成所有未完成的命令后被销毁,因此无法保证及时建立成功的连接。

Kotlin

@RunWith(AndroidJUnit4::class.java)

@MediumTest

class MyServiceTest {

@get:Rule

val serviceRule = ServiceTestRule()

@Test fun testWithStartedService() {

serviceRule.startService(

Intent(ApplicationProvider.getApplicationContext(),

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 规则,请参阅以下资源。

示例

BasicSample:ActivityTestRule 的简单用法。

 类似资料: