Espresso test Fail

China☆狼群 提交于 2020-01-24 19:31:09

问题


I am doing some Espresso testing in Android. The test is failing with this error:

java.lang.ClassCastException: androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity cannot be cast to com.stavro_xhardha.pockettreasure.MainActivity

This is my test method:

 @Test
    fun toolbarTitle_shouldContainCorrectInput() {
        val mockNavController = mock(NavController::class.java)
        val fragmentScenario = launchFragmentInContainer<SetupFragment>()
        fragmentScenario.onFragment {
           Navigation.setViewNavController(it.view!! , mockNavController)
        }
        onView(withId(R.id.toolbar)).check(matches(withText("Pick your country")))
    }

But the error doesn't come from the Test class but from my Fragment under test. The crash is executed in this line of code:

override fun onStart() {
        super.onStart()
        (activity!! as MainActivity).supportActionBar?.hide() //here
    }

What I don't get here is that I face no error when I run the app normally without test.


回答1:


Here is the full answer. So, let's repeat about launchFragmentInContainer. All that this functionality does it take the given fragment and launch it inside of an internal EmptyFragmentActivity class — placing the fragment inside of the root view container. So, it should be used to check fragment only, which doesn't depends from it's parent activity. In your case, you try to hide an action bar inside the fragment you're testing. But in test your fragment will not be launched in MainActivity. So if you want to check only the fragment, instead of (activity!! as MainActivity).supportActionBar?.hide() you'll better need to write something like this:

if(activity!! is MainActivity){
    activity?.supportActionBar?.hide()
}

Or you should write the test for your MainActivity or where you use your fragment



来源:https://stackoverflow.com/questions/56237797/espresso-test-fail

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!