尝试模拟 NavController 时出错
Error when trying to mock the NavController
尝试按照示例 https://developer.android.com/guide/navigation/navigation-testing,我遇到了预期错误
org.mockito.exceptions.base.MockitoException:
Mockito 无法模拟此 class:class androidx.navigation.NavController.
即使在包含所有依赖项之后:https://developer.android.com/training/testing/set-up-project
@RunWith(AndroidJUnit4::class)
class MyShopFragmentTest {
@Test
fun testMyShopScenario_F001() {
// Create a mock NavController
val mockNavController = mock(NavController::class.java)
// Create a graphical FragmentScenario for the MyShopFragment
val myShopFragmentScenario = launchFragmentInContainer<MyShopFragment>()
// Set the NavController property on the fragment
myShopFragmentScenario.onFragment { fragment ->
Navigation.setViewNavController(fragment.requireView(), mockNavController)
}
// Verify that performing a click prompts the correct Navigation action
onView(ViewMatchers.withId(R.id.search)).perform(ViewActions.click())
verify(mockNavController).navigate(R.id.searchFragment)
}
}
有什么想法吗?
解决方案是使用 all-open 注释(https://kotlinlang.org/docs/reference/compiler-plugins.html) and configure the project as described here --> https://developer.android.com/training/testing/set-up-project
对我来说,改变我的依赖性
androidTestImplementation 'org.mockito:mockito-core:3.2.4'
至
androidTestImplementation 'org.mockito:mockito-android:3.2.4'
效果很好。
尝试按照示例 https://developer.android.com/guide/navigation/navigation-testing,我遇到了预期错误
org.mockito.exceptions.base.MockitoException: Mockito 无法模拟此 class:class androidx.navigation.NavController.
即使在包含所有依赖项之后:https://developer.android.com/training/testing/set-up-project
@RunWith(AndroidJUnit4::class)
class MyShopFragmentTest {
@Test
fun testMyShopScenario_F001() {
// Create a mock NavController
val mockNavController = mock(NavController::class.java)
// Create a graphical FragmentScenario for the MyShopFragment
val myShopFragmentScenario = launchFragmentInContainer<MyShopFragment>()
// Set the NavController property on the fragment
myShopFragmentScenario.onFragment { fragment ->
Navigation.setViewNavController(fragment.requireView(), mockNavController)
}
// Verify that performing a click prompts the correct Navigation action
onView(ViewMatchers.withId(R.id.search)).perform(ViewActions.click())
verify(mockNavController).navigate(R.id.searchFragment)
}
}
有什么想法吗?
解决方案是使用 all-open 注释(https://kotlinlang.org/docs/reference/compiler-plugins.html) and configure the project as described here --> https://developer.android.com/training/testing/set-up-project
对我来说,改变我的依赖性
androidTestImplementation 'org.mockito:mockito-core:3.2.4'
至
androidTestImplementation 'org.mockito:mockito-android:3.2.4'
效果很好。