所以,我寫了單元測驗如下。這基本上呼叫了 Viewmodel 類中的一個方法。
@Test
fun `on clear Cached Calls AppUtility ClearCache`() {
sut.clearCache()
verify(exactly = 1) {
appUtilityMock.clearCache()
}
}
Viewmodel 中的方法
fun clearCache() {
Log.d(TAG, "clearCache:e ")
avonUtility.clearCache()
}
如您所見,我正在嘗試驗證是否clearCache()
呼叫了函式。
當我運行測驗時,我得到以下錯誤。一旦我洗掉該行,它就可以作業(成功)
Log.d(TAG, "clearCache:e ")
.
錯誤堆疊跟蹤
java.lang.RuntimeException: Method d in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details.
at android.util.Log.d(Log.java)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at io.mockk.proxy.jvm.advice.MethodCall.call(MethodCall.kt:14)
at io.mockk.proxy.jvm.advice.SelfCallEliminatorCallable.call(SelfCallEliminatorCallable.kt:14)
at io.mockk.impl.instantiation.JvmMockFactoryHelper.handleOriginalCall(JvmMockFactoryHelper.kt:83)
at io.mockk.impl.instantiation.JvmMockFactoryHelper.access$handleOriginalCall(JvmMockFactoryHelper.kt:20)
at io.mockk.impl.instantiation.JvmMockFactoryHelper$mockHandler$1$invocation$$inlined$stdFunctions$lambda$1.invoke(JvmMockFactoryHelper.kt:28)
at io.mockk.impl.stub.MockKStub$handleInvocation$originalPlusToString$1.invoke(MockKStub.kt:227)
at io.mockk.impl.stub.SpyKStub.defaultAnswer(SpyKStub.kt:15)
at io.mockk.impl.stub.MockKStub.answer(MockKStub.kt:42)
at io.mockk.impl.recording.states.AnsweringState.call(AnsweringState.kt:16)
at io.mockk.impl.recording.CommonCallRecorder.call(CommonCallRecorder.kt:53)
at io.mockk.impl.stub.MockKStub.handleInvocation(MockKStub.kt:263)
at io.mockk.impl.instantiation.JvmMockFactoryHelper$mockHandler$1.invocation(JvmMockFactoryHelper.kt:25)
at io.mockk.proxy.jvm.advice.Interceptor.call(Interceptor.kt:20)
at android.util.Log.d(Log.java)
我有模擬 AppUtility 之類的private val appUtilityMock: AppUtility = mockk(relaxed = true)
。
我不確定出了什么問題。請幫我理解。我正在使用 MockK 進行測驗。
uj5u.com熱心網友回復:
您正在呼叫該函式Log.d
,但它在android.util.Log
其中,因此在您的測驗中不可用。有關更多資訊,請參閱檔案。您可以通過將其添加到部分中的 gradle 檔案來添加默認實作android {
:
testOptions {
unitTests.returnDefaultValues = true
}
您還可以在 Log 周圍注入一個包裝器并模擬該包裝器,就像使用AppUtility
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494601.html