Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
13
respostas

Erro no teste da class: ListaLeilaoTelaTest

Ola boa dia,

Estou com erro ao testar class ListaLeilaoTelaTest, aqui o erro que esta mostrando no terminal:

Testing started at 16:46 ...

01/10 16:46:13: Launching ListaLeilaoTelaTest
Running tests

$ adb shell am instrument -w -r   -e debug false -e class 'br.com.alura.leilao.ui.recyclerview.adapter.ListaLeilaoTelaTest' br.com.alura.leilao.test/android.support.test.runner.AndroidJUnitRunner
Client not ready yet..
Started running tests

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with text: is "casa"

tambem class ListaLeilaoTelaTest:

public class ListaLeilaoTelaTest{

    @Rule
    public ActivityTestRule activity = new ActivityTestRule(ListaLeilaoActivity.class, true, true);

    @Test
    public void get_ShowUmLeilao(){
        Espresso.onView(ViewMatchers.withText("casa")).check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
//        Espresso.onView(withText(endsWith("casa"))).check(matches(isDisplayed()));
    }
}

Lembrando que eu ja comentei:

//itemView.setVisibility(View.VISIBLE);
13 respostas

Oi Guilherme, tudo bem?

Se o leilão está aparecendo na tela é para o teste passar sem problemas. Consegue me mandar o seu código via GitHub para eu dar uma olhada?

[]s

Foi dar test no app e tem uma mensagem de erro no Logcat:

2019-01-14 15:43:20.400 4108-4128/br.com.alura.leilao D/OkHttp: <-- HTTP FAILED: java.net.SocketTimeoutException: failed to connect to /192.168.20.248 (port 8080) from /192.168.232.2 (port 58974) after 10000ms

Mais um coisa nao esta aparecendo os leilão no app, que eu criei no localhost e o servidor esta ligado seu erro no terminal.

post erro

Oi Guilherme, tudo bem?

Desculpe a demora, pelo o erro tudo indica que você não está conseguindo se conectar com o servidor por meio deste endereço.

Faça o seguinte teste, veja se a partir do endereço http://192.168.20.248 você consegue acessar o seu servidor via navegador do dispositivo.

Se não der certo, talvez o endereço esteja errado.

[]s

Bom dia,

Eu não consigo conectar como http://192.168.20.248, mais o servidor esta funcionando porque no localhost:8080 funcinar nomarmente, com os leilãos que eu criei.

Se o servidor está funcionando já temos o primeiro passo, sendo assim, vamos para os próximos testes:

Tente acessar o endereço http://192.168.20.248/ via navegador do seu computador, se funcionar, provalvemente o seu celular e o servidor não estão na mesma rede e vai ser necessário realizar essa configuração.

Caso isso não seja possível, existe uma alternativa para configurar o endereço do servidor como um endereço público usando o ngrok.

Apenas como desencargo de consciência, você fez a configuração no AndroidManifest para permitir a comunicação via HTTP?

Aqui codigo AndroidMainfest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="br.com.alura.leilao">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:targetApi="m"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".ui.activity.ListaLeilaoActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ui.activity.LancesLeilaoActivity" />
        <activity android:name=".ui.activity.ListaUsuarioActivity" />
    </application>

</manifest>

Ja to conecter com servidor ngrok, mais como eu conector emulador android no servidor ngrok?

Tudo parece ok no manifest, como você fez a configuração com o ngrok? No geral você faz o mapeamento do endereço que quer tornar público e ele cria um Forwarding indicando o endereço que pode ser usado. Inclusive, no próprio site mostra um exemplo a partir desta imagem

https://ngrok.com/static/img/ngrok-demo-static.png

Nesse caso o endereço de http://localhost:3000 está público a partir do endereço http://katesapp.ngrok.io. O seu apareceu conforme esse exemplo?

Como eu faco para emulador android entra no servidor ngrok?

Ele continua tentando conectar no 192.168.20.248.

Oi Guilherme, você precisa mudar o endereço da constante URL_BASE que fica na classe RetrofitInicializador.

Agora deu ser certo ta aparecendo os leilaos, mais o problema do teste da class ainda continua:

Testing started at 16:45 ...

01/18 16:45:52: Launching get_ShowUmLeilao()
Running tests

$ adb shell am instrument -w -r   -e debug false -e class 'br.com.alura.leilao.ui.recyclerview.adapter.ListaLeilaoTelaTest#get_ShowUmLeilao' br.com.alura.leilao.test/android.support.test.runner.AndroidJUnitRunner
Client not ready yet..
Started running tests

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with text: is "casa"

Eu ja verifiquei o nome do leilao casa esta certo.

solução!

A parte boa é que resolvemos a comunicação com o server :)

Estou assumindo que está aparecendo na tela do dispositivo o texto "casa". Em casos que não funciona, pode ser pelo fato do Espresso executar o teste rapidamente e não esperar a resposta da comunicação com o servidor...

Nesses casos, podemos considerar o uso de um delay, tente adicionar o seguinte código antes de executar a verificação com o Espresso:

public class ListaLeilaoTelaTest{

    @Rule
    public ActivityTestRule activity = new ActivityTestRule(ListaLeilaoActivity.class, true, true);

    @Test
    public void get_ShowUmLeilao() throws InterruptedException {
        Thread.sleep(1000);
        Espresso.onView(ViewMatchers.withText("casa")).check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
//        Espresso.onView(withText(endsWith("casa"))).check(matches(isDisplayed()));
    }
}

Isso é um detalhe que comento neste exercício. Faça o teste e veja se funciona.