我正在尝试使用MockK将Configuration实例的orientation值存根到Resources上,这样我就可以在我的应用程序中测试一些横向和纵向行为。
不幸的是,我遇到了一些我从未见过的轻松模仿的事情。
import android.content.res.Configuration
import android.content.res.Resources
...
@Test
fun `When behavior, verify result based on orientation`() {
val resources = mockk<Resources>(relaxed = true) {
every { configuration } returns mockk(relaxed = true) {
every { orientation } returns Configuration.ORIENTATION_LANDSCAPE // Line 36, see stack trace
}
}
...
}第36行抛出此异常:
io.mockk.MockKException: Missing calls inside every { ... } block.
at io.mockk.impl.recording.states.StubbingState.checkMissingCalls(StubbingState.kt:14)
at io.mockk.impl.recording.states.StubbingState.recordingDone(StubbingState.kt:8)
at io.mockk.impl.recording.CommonCallRecorder.done(CommonCallRecorder.kt:47)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:60)
at io.mockk.impl.eval.EveryBlockEvaluator.every(EveryBlockEvaluator.kt:30)
at io.mockk.MockKDsl.internalEvery(API.kt:92)
at io.mockk.MockKKt.every(MockK.kt:98)
at com.my.app.OrientationTests.When behavior, verify result based on orientation(OrientationTests.kt:36)
...
Process finished with exit code 255我真的不确定为什么要这么说,因为这是一个轻松的模仿。有没有人看过这个?我很难在网上找到任何提到如何使用mockk来存根资源和配置的东西。
发布于 2021-05-26 06:08:01
这是一个Java-Kotlin interop for getters and setters隐藏底层实现的例子:
configuration实际上是Resources.getConfiguration() (方法调用),而orientation是Configuration.orientation ( Java字段,而不是方法调用)。
尽管它们在Kotlin方面看起来是一样的,但由于orientation不是一个可以模拟的方法调用,第二个every正在失败。
在这种情况下,可以在没有every的情况下直接设置orientation
@Test
fun `When behavior, verify result based on orientation`() {
val resources = mockk<Resources> {
every { configuration } returns mockk {
orientation = Configuration.ORIENTATION_LANDSCAPE
}
}
}https://stackoverflow.com/questions/67693266
复制相似问题