junit 如何使用mockk库模拟android上下文

vx6bjr1n  于 2023-10-20  发布在  Android
关注(0)|答案(2)|浏览(160)

我是Android上JUnit测试的新手,我正在测试一个函数,它使用Android上下文对象来获取字符串资源并进行一些比较。如何模拟android context object来成功测试这个函数?我使用Mockk测试库进行测试。

private val context = mockk<Context>()
  private val contextWrapper = ApplicationContextWrapper(context)
  private val objectUnderTest = AppLinkService(contextWrapper)

我试图使用mockk<Context>()模拟上下文,但出现了以下异常

io.mockk.MockKException: no answer found for: Context(#1).getApplicationContext()
wxclj1h5

wxclj1h51#

好吧,我找到答案了。使用轻松的模拟解决了我的问题

val mContextMock = mockk<Context>(relaxed = true)
a1o7rhls

a1o7rhls2#

一般来说,模拟上下文是有风险的,因为它提供了有关应用程序环境的信息,并且在后台做了很多事情。
ApplicationProvider提供了在测试中检索当前应用程序上下文的能力。您需要做的就是导入androidx:test:core库的the latest version

dependencies {
    // To use the androidx.test.core APIs
    androidTestImplementation("androidx.test:core:1.5.0")
    ...
}

然后在测试类中检索上下文

private val context = ApplicationProvider.getApplicationContext()

相关问题