mockkStatic 和 mockkObject 不模拟 Android 中的伴随对象
mockkStatic and mockkObject doesn't mock companion objects in Android
我有一个很简单的class:
class TestClass {
companion object {
fun sampleFunc(value: Int): Int {
return value + 5
}
}
}
还有一个非常简单的测试:
@Test
fun `test class`() {
mockkObject(TestClass::class)
every {
TestClass.sampleFunc(any())
} returns 11
assertThat(TestClass.sampleFunc(5)).isEqualTo(11)
}
堆栈跟踪:
Failed matching mocking signature for
left matchers: [any()]
io.mockk.MockKException: Failed matching mocking signature for
left matchers: [any()]
at io.mockk.impl.recording.SignatureMatcherDetector.detect(SignatureMatcherDetector.kt:99)
at io.mockk.impl.recording.states.RecordingState.signMatchers(RecordingState.kt:39)
at io.mockk.impl.recording.states.RecordingState.round(RecordingState.kt:31)
at io.mockk.impl.recording.CommonCallRecorder.round(CommonCallRecorder.kt:50)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:59)
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:104)
MockK 版本:1.9.3
OS: mac
科特林版本:1.5.21
JDK版本:11
JUnit 版本:4.12
有什么想法吗?我也试过 mockkStatic 得到了同样的结果。
根据这个回答:https://github.com/mockk/mockk/issues/136#issuecomment-419879755
@Test
fun `test class`() {
mockkObject(TestClass.Companion)
every {
TestClass.sampleFunc(any())
} returns 11
assertThat(TestClass.sampleFunc(5)).isEqualTo(11)
}
行之有效,行之有效。
我有一个很简单的class:
class TestClass {
companion object {
fun sampleFunc(value: Int): Int {
return value + 5
}
}
}
还有一个非常简单的测试:
@Test
fun `test class`() {
mockkObject(TestClass::class)
every {
TestClass.sampleFunc(any())
} returns 11
assertThat(TestClass.sampleFunc(5)).isEqualTo(11)
}
堆栈跟踪:
Failed matching mocking signature for
left matchers: [any()]
io.mockk.MockKException: Failed matching mocking signature for
left matchers: [any()]
at io.mockk.impl.recording.SignatureMatcherDetector.detect(SignatureMatcherDetector.kt:99)
at io.mockk.impl.recording.states.RecordingState.signMatchers(RecordingState.kt:39)
at io.mockk.impl.recording.states.RecordingState.round(RecordingState.kt:31)
at io.mockk.impl.recording.CommonCallRecorder.round(CommonCallRecorder.kt:50)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:59)
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:104)
MockK 版本:1.9.3 OS: mac 科特林版本:1.5.21 JDK版本:11 JUnit 版本:4.12
有什么想法吗?我也试过 mockkStatic 得到了同样的结果。
根据这个回答:https://github.com/mockk/mockk/issues/136#issuecomment-419879755
@Test
fun `test class`() {
mockkObject(TestClass.Companion)
every {
TestClass.sampleFunc(any())
} returns 11
assertThat(TestClass.sampleFunc(5)).isEqualTo(11)
}
行之有效,行之有效。