1
resposta

Test Unit de um Adapter em um fragment. Me retorna erro: Activity has been destroyed

@RunWith(MockitoJUnitRunner::class)
class MoreHomeFragmentTest {


    private lateinit var perfilFragment:MoreHomeFragment

    @Mock
    private lateinit var activity:MainActivity

    @Mock
    lateinit var activityComponent: ActivityComponent

    @Mock
    lateinit var presenter: MoreHomePresenter

    @Mock
    private lateinit var adapter: MenuAdapter

    @Mock
    lateinit var context:Context


    @Before
    fun setUp() {

        activity = MainActivity()
        perfilFragment = MoreHomeFragment()
        startFragment(perfilFragment)
        perfilFragment.activityComponent = activityComponent
        perfilFragment.presenter         = presenter


    }


    @Test
    fun deve_Atualizar_Lista_Menus(){


        adapter = MenuAdapter(context)

        perfilFragment.onActivityCreated(null)

        perfilFragment.configureMenu(false)


        val menuItems = ArrayList<MenuItem>()

        verify(adapter).setDataList(menuItems)

    }


    private fun startFragment(perfilFragment: Fragment) {
        val fragmentManager = activity.supportFragmentManager
        val fragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.replace(R.id.container, perfilFragment)
        fragmentTransaction.commit()
    }

}
1 resposta

Oi Jean, tudo bem?

Antes de tudo, o que você quer realmente testar? Observando o seu código, parece realizar uma integração com o Android Framework, caso for isso, é necessário implementar um teste instrumental que dá acesso ao Context e permite inicializar todos os componentes do Android.

Caso seja de unidade, o comportamento de inicializar um Fragment não é necessário, ainda mais que é um Mock que não mantém nenhum comportamento original da classe que foi mockada.

[]s