首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在用户界面测试中使用MockK

无法在用户界面测试中使用MockK
EN

Stack Overflow用户
提问于 2022-07-28 02:13:57
回答 1查看 661关注 0票数 0

当我尝试在UI测试中使用MockK时,我遇到了一个错误,这个测试在Unittest中非常有效。

代码语言:javascript
运行
复制
MockK could not self-attach a jvmti agent to the current VM

全错误报告

代码语言:javascript
运行
复制
Caused by: io.mockk.proxy.MockKAgentException: MockK could not self-attach a jvmti agent to the current VM. This feature is required for inline mocking.
This error occured due to an I/O error during the creation of this agent: java.io.IOException: Unable to dlopen libmockkjvmtiagent.so: dlopen failed: library "libmockkjvmtiagent.so" not found

Potentially, the current VM does not support the jvmti API correctly
at io.mockk.proxy.android.AndroidMockKAgentFactory.init(AndroidMockKAgentFactory.kt:67)
at io.mockk.impl.JvmMockKGateway.<init>(JvmMockKGateway.kt:46)
at io.mockk.impl.JvmMockKGateway.<clinit>(JvmMockKGateway.kt:186)
... 30 more
Caused by: java.io.IOException: Unable to dlopen libmockkjvmtiagent.so: dlopen failed: library "libmockkjvmtiagent.so" not found
at dalvik.system.VMDebug.nativeAttachAgent(Native Method)
at dalvik.system.VMDebug.attachAgent(VMDebug.java:693)
at android.os.Debug.attachJvmtiAgent(Debug.java:2617)
at io.mockk.proxy.android.JvmtiAgent.<init>(JvmtiAgent.kt:48)
at io.mockk.proxy.android.AndroidMockKAgentFactory.init(AndroidMockKAgentFactory.kt:40)

让我知道是否有其他方法来初始化MockK,以便在Espresso中使用

当尝试添加

代码语言:javascript
运行
复制
androidTestImplementation "org.mockito:mockito-inline:$mockitoVersion"

观察到这个错误

与路径'mockito-extensions/org.mockito.plugins.MockMaker'.一起找到的2个文件添加packagingOptions块可能有帮助,请参阅https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/ResourcesPackagingOptions以获得更多信息

版本

代码语言:javascript
运行
复制
mockk version = 1.12.4
Android = 32
kotlin_version = '1.6.21'

代码,它在android测试用例(Espresso)中添加时会导致此问题。

代码语言:javascript
运行
复制
val presenter = mockk<LoginPresenter>()

val view = mockk<LoginView>()

如何执行类似于此的模拟api调用

代码语言:javascript
运行
复制
val presenter = mockk<LoginPresenter>()
    val view = mockk<LoginView>()


onView(withId(R.id.button_login)).perform(loginClick())

但是我希望在loginClick()中调用模拟api,而不是()中的,我可以调用一些下面的执行方式,以便我的应用程序使用模拟api,或者有什么方法使整个测试用例文件使用mockk数据?

代码语言:javascript
运行
复制
every { presenter.onLoginButtonClicked("bc@mail.com","Abc123")  } returns  view.onCognitoLoginSuccess()
EN

回答 1

Stack Overflow用户

发布于 2022-10-17 09:21:15

对我来说,这解决了问题:

代码语言:javascript
运行
复制
android {
  testOptions {
    packagingOptions {
      jniLibs {
        useLegacyPackaging = true
      }
    }
  }
}

我找到了这个这里。希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73146494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档