Object method call is mocked properly.
I get NPE on the parameter method calls.
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
Mocked class:
@Singleton
class NetworkManager(private val context: Context) {
val networkAvailable: Boolean
get() =
(context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).activeNetworkInfo?.isConnected ?:
false
}
Mocked in:
import io.mockk.every
import io.mockk.mockk
...
@Singleton
@Provides
fun provideNetworkManager(): NetworkManager {
val mock: NetworkManager = mockk()
every { mock.networkAvailable } returns false <-- crash
return mock
}
...
I have tried converting property val networkAvailable to a fun;
Mock with relaxed (val mock: NetworkManager = mockk(relaxed = true));
None of it helped.
Should the actual method/property get implementation be called on it's mocking?
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at com.deividasstr.data.networking.manager.NetworkManager.networkAvailable(NetworkManager.kt:11)
at com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:66)
at com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:18)
at io.mockk.impl.eval.RecordedBlockEvaluator$record$block$1.invoke(RecordedBlockEvaluator.kt:22)
at io.mockk.impl.recording.JvmAutoHinter.autoHint(JvmAutoHinter.kt:23)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:31)
at io.mockk.impl.eval.EveryBlockEvaluator.every(EveryBlockEvaluator.kt:25)
at io.mockk.MockKDsl.internalEvery(API.kt:93)
at io.mockk.MockKKt.every(MockK.kt:79)
at com.deividasstr.ui.utils.di.TestNetworkModule.provideNetworkManager(TestNetworkModule.kt:66)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.proxyProvideNetworkManager(TestNetworkModule_ProvideNetworkManagerFactory.java:31)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.provideInstance(TestNetworkModule_ProvideNetworkManagerFactory.java:22)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:18)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:8)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.injectMainActivity(DaggerTestAppComponent.java:994)
at com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:983)
at com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:936)
at dagger.android.DispatchingAndroidInjector.maybeInject(DispatchingAndroidInjector.java:81)
at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:102)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:59)
at dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43)
at com.deividasstr.ui.features.main.MainActivity.onCreate(MainActivity.kt:22)
at android.app.Activity.performCreate(Activity.java:7131)
at android.app.Activity.performCreate(Activity.java:7122)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:667)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6642)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.deividasstr.sweetscounter/com.deividasstr.ui.features.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2902)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6642)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at com.deividasstr.data.networking.manager.NetworkManager.networkAvailable(NetworkManager.kt:11)
at com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:66)
at com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:18)
at io.mockk.impl.eval.RecordedBlockEvaluator$record$block$1.invoke(RecordedBlockEvaluator.kt:22)
at io.mockk.impl.recording.JvmAutoHinter.autoHint(JvmAutoHinter.kt:23)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:31)
at io.mockk.impl.eval.EveryBlockEvaluator.every(EveryBlockEvaluator.kt:25)
at io.mockk.MockKDsl.internalEvery(API.kt:93)
at io.mockk.MockKKt.every(MockK.kt:79)
at com.deividasstr.ui.utils.di.TestNetworkModule.provideNetworkManager(TestNetworkModule.kt:66)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.proxyProvideNetworkManager(TestNetworkModule_ProvideNetworkManagerFactory.java:31)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.provideInstance(TestNetworkModule_ProvideNetworkManagerFactory.java:22)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:18)
at com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:8)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.injectMainActivity(DaggerTestAppComponent.java:994)
at com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:983)
at com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:936)
at dagger.android.DispatchingAndroidInjector.maybeInject(DispatchingAndroidInjector.java:81)
at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:102)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:59)
at dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43)
at com.deividasstr.ui.features.main.MainActivity.onCreate(MainActivity.kt:22)
at android.app.Activity.performCreate(Activity.java:7131)
at android.app.Activity.performCreate(Activity.java:7122)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:667)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882)
... 11 more
Test running failed: Instrumentation run failed due to 'Process crashed.'
Thanks for reporting it, will check it later
ср, 4 июля 2018 г., 10:16 Deividas Strioga notifications@github.com:
Expected Behavior
Object method call is mocked properly.
Current BehaviorI get NPE on the parameter method calls.
Failure Information (for bugs)java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.Object
android.content.Context.getSystemService(java.lang.String)' on a null
object reference
Steps to ReproduceMocked class:
@Singleton
class NetworkManager(private val context: Context) {val networkAvailable: Boolean get() = (context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).activeNetworkInfo?.isConnected ?: false}
Mocked in:
import io.mockk.every
import io.mockk.mockk
...
@Singleton
@Provides
fun provideNetworkManager(): NetworkManager {
val mock: NetworkManager = mockk()
every { mock.networkAvailable } returns false <-- crash
return mock
}
...I have tried converting property val networkAvailable to a fun;
Mock with relaxed (val mock: NetworkManager = mockk(relaxed = true));
None of it helped.Should the actual method/property get implementation be called on it's
mocking?
Context
- MockK version: 1.8.5
- OS: android P
- Kotlin version: 1.2.50
- JDK version: 1.8
- Type of test: android instrumented test
Stack trace
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.Object
android.content.Context.getSystemService(java.lang.String)' on a null
object reference
at
com.deividasstr.data.networking.manager.NetworkManager.networkAvailable(NetworkManager.kt:11)
at
com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:66)
at
com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:18)
at
io.mockk.impl.eval.RecordedBlockEvaluator$record$block$1.invoke(RecordedBlockEvaluator.kt:22)
at io.mockk.impl.recording.JvmAutoHinter.autoHint(JvmAutoHinter.kt:23)
at
io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:31)
at io.mockk.impl.eval.EveryBlockEvaluator.every(EveryBlockEvaluator.kt:25)
at io.mockk.MockKDsl.internalEvery(API.kt:93)
at io.mockk.MockKKt.every(MockK.kt:79)
at
com.deividasstr.ui.utils.di.TestNetworkModule.provideNetworkManager(TestNetworkModule.kt:66)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.proxyProvideNetworkManager(TestNetworkModule_ProvideNetworkManagerFactory.java:31)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.provideInstance(TestNetworkModule_ProvideNetworkManagerFactory.java:22)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:18)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:8)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at
com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.injectMainActivity(DaggerTestAppComponent.java:994)
at
com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:983)
at
com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:936)
at
dagger.android.DispatchingAndroidInjector.maybeInject(DispatchingAndroidInjector.java:81)
at
dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:102)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:59)
at
dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43)
at
com.deividasstr.ui.features.main.MainActivity.onCreate(MainActivity.kt:22)
at android.app.Activity.performCreate(Activity.java:7131)
at android.app.Activity.performCreate(Activity.java:7122)
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at
androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:667)
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
at
android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6642)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.deividasstr.sweetscounter/com.deividasstr.ui.features.main.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.Object
android.content.Context.getSystemService(java.lang.String)' on a null
object reference
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2902)
at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
at
android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6642)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual
method 'java.lang.Object
android.content.Context.getSystemService(java.lang.String)' on a null
object reference
at
com.deividasstr.data.networking.manager.NetworkManager.networkAvailable(NetworkManager.kt:11)
at
com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:66)
at
com.deividasstr.ui.utils.di.TestNetworkModule$provideNetworkManager$1.invoke(TestNetworkModule.kt:18)
at
io.mockk.impl.eval.RecordedBlockEvaluator$record$block$1.invoke(RecordedBlockEvaluator.kt:22)
at io.mockk.impl.recording.JvmAutoHinter.autoHint(JvmAutoHinter.kt:23)
at
io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:31)
at io.mockk.impl.eval.EveryBlockEvaluator.every(EveryBlockEvaluator.kt:25)
at io.mockk.MockKDsl.internalEvery(API.kt:93)
at io.mockk.MockKKt.every(MockK.kt:79)
at
com.deividasstr.ui.utils.di.TestNetworkModule.provideNetworkManager(TestNetworkModule.kt:66)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.proxyProvideNetworkManager(TestNetworkModule_ProvideNetworkManagerFactory.java:31)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.provideInstance(TestNetworkModule_ProvideNetworkManagerFactory.java:22)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:18)
at
com.deividasstr.ui.utils.di.TestNetworkModule_ProvideNetworkManagerFactory.get(TestNetworkModule_ProvideNetworkManagerFactory.java:8)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at
com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.injectMainActivity(DaggerTestAppComponent.java:994)
at
com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:983)
at
com.deividasstr.ui.utils.di.DaggerTestAppComponent$MainActivitySubcomponentImpl.inject(DaggerTestAppComponent.java:936)
at
dagger.android.DispatchingAndroidInjector.maybeInject(DispatchingAndroidInjector.java:81)
at
dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:102)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:59)
at
dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43)
at
com.deividasstr.ui.features.main.MainActivity.onCreate(MainActivity.kt:22)
at android.app.Activity.performCreate(Activity.java:7131)
at android.app.Activity.performCreate(Activity.java:7122)
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at
androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:667)
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882)
... 11 moreTest running failed: Instrumentation run failed due to 'Process crashed.'
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/mockk/mockk/issues/105, or mute the thread
https://github.com/notifications/unsubscribe-auth/AFAbjFz2jWqWr1lNjwYn5TrBsaYJ-sx3ks5uDHnggaJpZM4VCJer
.
Any update? I'm facing the same issue with Android's Locale.getLanguage().
Edit: Updating from MockK 1.8.3 to 1.8.7 resolved this for me!
I think I am still having this issue in MockK 1.8.13.kotlin13, but only on the mockk-android flavor.
I'm still facing the same issue
Most helpful comment
I'm still facing the same issue