Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Dúvida sobre como inicializar a activity no teste instrumentado

Bom dia!

Na aula foi utilizado o ActivityTestRule, em seu construtor é possível dizer que a activity não deve ser inicializada logo no começo do teste, e depois que os ajustes no servidor tivessem sido concluídos, aí sim inicializava a activity. No meu código eu estou utilizando o ActivityScenarioRule, nele eu não encontrei essa função de não inicializar ela automaticamente, a forma que encontrei de evitar esse problema é recriando ela antes do meu onView, mas imagino que não seja uma boa prática visto que perdi processamento inicializando ela antes do necessário e depois reinicializando... Existe uma maneira melhor de fazer isto? Imagem do código mostrando o uso do recreate da activity

PS: Tentei utilizar no começo o close d scenario e depois o recreate (imaginei que assim não iria inicializar ela atoa, mas no recreate eu recebo um nullPointerException por ter destruído ela). Não sei se tentaasse inicializar o ActivityScenarioRule dentro do teste poderia ser uma solução, o problema é que teria que realizar isso em todos os testes... Desde já, muitíssimo obrigado!

2 respostas
solução!

Olá Vinicius, tudo bem?

Para evitar a inicialização automática da activity, você pode criar uma instância do ActivityScenario no início do seu teste, mas sem iniciar a activity. Em seguida, você pode chamar o método onActivity() para iniciar a activity quando estiver pronta para o teste.

Aqui está um exemplo de como fazer isso:

public class MyTest {
    private ActivityScenario<MyActivity> scenario;

    @Before
    public void setUp() {
        scenario = ActivityScenario.launch(MyActivity.class);
    }

    @Test
    public void myTest() {
        // Faça seus ajustes no servidor aqui

        // Inicie a activity quando estiver pronta
        scenario.onActivity(activity -> {
            // Agora você pode interagir com a activity usando onView
        });
    }

    @After
    public void tearDown() {
        scenario.close();
    }
}

Dessa forma, você pode controlar exatamente quando a activity é iniciada durante o teste, sem precisar recriá-la. Além disso, você pode reutilizar a mesma instância do ActivityScenario em vários testes, o que pode ser mais eficiente do que criar uma nova instância em cada teste.

Qualquer dúvida, estarei à disposição :)

Bom dia, perfeito, muitíssimo obrigado!!!