Android Test4 Application(Context)实例的获取
Android Test4 Application(Context)实例的获取
在开发一个 SDK 时,最常涉及大的一个问题:初始时 SDK 内 Context
/Application
的引用。它可以是 Activity
Service
等各组件的实例,也可以是自定义的 Application
实例。由于 Activity
/Service
等组件的生命周期都有定数,Application
的生命时长是贯穿整个 APK 的开始到结束。因此对于 SDK 内需要长时间存在的实例,可以关联到 Application
的 Context
,在使用时需要的 Context
可以关联到普通组件的 Context
实例。
测试的 Context
和 Application
被测试方法很多时候需要依赖 Context
去访问相关的资源或调用它的方法获取想要的结果,那么在测试代码中就需要来获取到这个 Context
实例。
下面以 SDK 内仪器测试(Instrumentation Test)的测试代码为例,说明如何通过测试框架获取 Context
和 Application
实例。
在 @Before
方法中初始化整个测试方法需要依赖的 Context
实例。
class ToolsTest {private lateinit var _context: Context@Beforefun init() {_context = InstrumentationRegistry.getInstrumentation().targetContext// 或// _context = ApplicationProvider.getApplicationContext<Context>()}@Testfun test1() {// ...}
}
倘若需要 Application
实例,可以如下获取。
class ToolsTest {private lateinit var _application: Applicationprivate lateinit var _context: Context@Beforefun init() {_application = InstrumentationRegistry.getInstrumentation().targetContext.applicationContext as Application// 或// _application = ApplicationProvider.getApplicationContext<Application>()_context = application.applicationContext}@Testfun test1() {// ...}
}
上面这段初始化代码中,获得 Application
实例需要通过 Instrumentation
获取的 applicationContext
实例进行类型强转。