Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: NullPointerException while mocking NavController on instrumentation tests #355

Open
juawcevada-circle opened this issue Sep 17, 2019 · 2 comments

Comments

@juawcevada-circle
Copy link

juawcevada-circle commented Sep 17, 2019

Expected Behavior

I should be able to mock NavController on a Espresso test.

Current Behavior

Im having this crash when I'm mocking NavController on a Espresso test:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object androidx.collection.SparseArrayCompat.get(int)' on a null object reference at androidx.navigation.NavGraph.findNode(NavGraph.java:171) at androidx.navigation.NavGraph.findNode(NavGraph.java:166) at androidx.navigation.ui.NavigationUI.findStartDestination(NavigationUI.java:570) at androidx.navigation.ui.AppBarConfiguration$Builder.<init>(AppBarConfiguration.java:124) at androidx.navigation.ui.ToolbarKt.setupWithNavController$default(Toolbar.kt:82)

Steps to Reproduce

Have a fragment with this the toolbar set up with NavControler:
val navController = findNavController() toolbar.setupWithNavController(navController)

Mock the Nav controller on the Espresso test:
private val navController :NavController = mockk(relaxed = true)

This should work with mockito, I didn't test it but google has a sample with it on their documentation:
https://developer.android.com/guide/navigation/navigation-testing

Context

  • MockK version:1.9.3
  • Kotlin version:1.3.31
  • JDK version:1.8
  • Type of test:instrumented test

Stack trace

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object androidx.collection.SparseArrayCompat.get(int)' on a null object reference
at androidx.navigation.NavGraph.findNode(NavGraph.java:171)
at androidx.navigation.NavGraph.findNode(NavGraph.java:166)
at androidx.navigation.ui.NavigationUI.findStartDestination(NavigationUI.java:570)
at androidx.navigation.ui.AppBarConfiguration$Builder.<init>(AppBarConfiguration.java:124)
at androidx.navigation.ui.ToolbarKt.setupWithNavController$default(Toolbar.kt:82)
at com.fundingcircle.investors.android.uk.features.sell.view.ConfirmSaleFragment.setUpToolbar(ConfirmSaleFragment.kt:60)
at com.fundingcircle.investors.android.uk.features.sell.view.ConfirmSaleFragment.onViewCreated(ConfirmSaleFragment.kt:40)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:892)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1696)
at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:293)
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:312)
at androidx.fragment.app.testing.FragmentScenario$1.perform(FragmentScenario.java:291)
at androidx.test.core.app.ActivityScenario.lambda$onActivity$1$ActivityScenario(ActivityScenario.java:535)
at androidx.test.core.app.ActivityScenario$$Lambda$0.run(Unknown Source:4)
at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2124)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
@oleksiyp
Copy link
Collaborator

Not sure about this one. Can you provide a sample project? Because it is pretty hard to deal with all this boilerplate project setup.

@oleksiyp oleksiyp added the bug label Nov 2, 2019
@oleksiyp oleksiyp changed the title NullPointerException mocking NavController on instrumentation tests with Mockk BNullPointerException mocking NavController on instrumentation tests with Mockk Nov 2, 2019
@oleksiyp oleksiyp changed the title BNullPointerException mocking NavController on instrumentation tests with Mockk Bug: NullPointerException while mocking NavController on instrumentation tests Nov 2, 2019
@smellouk
Copy link

Hi, I'm having the same issue with apollo client on instrumentation tests

@oleksiyp you can check with apollo client

@Test
  fun testSomething() {
    every {
      apolloClient.query(any<QueryClass>()) // <--- //java.lang.NullPointerException: Attempt to invoke virtual method //`ResponseFieldMapperFactory`
    } returns call
  }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants