Teste de integração no Flutter
Tags: integrationtest, testeintegracao, teste, fluttertest
Published: 2024-04-20 04:01:00

Fala Devs, blz?

Já sabemos que escrever testes unitários no Flutter é muito simples, basicamente existem três tipos de testes no flutter, o primeiro e mais comum (que deveria ser requisito mínimo para o desenvolvedor Flutter) é o teste unitário, ele é muito simples e rápido para executar, entretanto é o que menos TEM integridade, o segundo são os testes de widgets que também são muitos simples para desenvolver, também existe o Golden Test (que temos artigos sobre por aqui) que é uma vertente do teste de widget.

Por fim temos o tipo de teste que é título deste artigo, o Teste de Integração que é o mais complexo e o mais custoso apesar de conseguir garantir a qualidade melhor dos seus testes, pois desta forma você consegue testar suas aplicações de ponta a ponta, mais conhecido como **E2E** (**End to End**), basicamente você conseguirá executar suas aplicações dentro de um dispositivo (físico ou emulado) e automatizar cenários de testes como se fosse um usuário executando seu aplicativo. Você pode testar seu aplicativo em diferentes dispositivos e diferentes versões de sistemas operacionais.

A aplicativo que iremos testar é uma aplicação com duas telas, a primeira com uma mensagem de bem-vindo e outra com uma calculadora

![](https://cdn-images-1.medium.com/max/800/1*l7gk7kpQMUhjeK5T4lN9cg.png)

![](https://cdn-images-1.medium.com/max/800/1*FGwnTNO0vm99mB6mry10Fg.png)

O projeto está no meu github [https://github.com/toshiossada/flutterIntegrationTes](https://github.com/toshiossada/flutterIntegrationTest)

Para conseguirmos realizar existe uma package nativo do flutter para fazer isso, o **integration_test**, podemos adicioná-lo no pubspec como dependência de desenvolvimento.
{% gist https://gist.github.com/toshiossada/2b5de02d06327e891962c383e10c9502 file=pubspec.yaml %}
O teste de integração é muito parecido com testes de widgets, então basicamente temos que conseguir interceptar o widget que iremos interagir e aplicar ações nele, assim como nos testes de widgets conseguimos interceptar por texto, ícone, tipo, chave etc. Utilizando de métodos como byType, byIcon, byKey, byWidget, byTooltip, text etc.

A maneira mais simples e eficaz e interceptar o widget por chave, então no seu aplicativo onde conseguir gerar uma chave conhecida, coloque no seu widget.

![](https://cdn-images-1.medium.com/max/800/1*4qBCbdBz32LkP_Ub4La1Rg.png)

Agora para criar nossos testes, na raiz do seu projeto crie a pasta “**integration_test**” que é onde ficara os arquivos de testes de integração da nossa aplicação, lembre-se os arquivos precisam ter o **sulfixo _test.dart.**

![](https://cdn-images-1.medium.com/max/800/1*U6YiwKuQ_mL1mjB-D5RRoQ.png)

Nosso primeiro ato é inicializar nosso teste de integração, para isso ao topo do arquivo de teste adicionamos **IntegrationTestWidgetsFlutterBinding.ensureInitialized**.

![](https://cdn-images-1.medium.com/max/800/1*qLx0zg24zH2bsTUFPCMT7A.png)

A partir dai conseguimos iniciar nossos testes, como comentei anteriormente os testes de integração é parecido com testes de widgets, então para isso criamos um **testWidgets()** passando a descrição e a função do teste.

Em seguida executamos o método **main** da nossa aplicação e logo em seguida executamos o **pumpAndSettle** para garantir que todos os estados de animações sejam finalizados.

![](https://cdn-images-1.medium.com/max/800/1*Pyn-AoRFR0Rhld1iMV-P4Q.png)

Então agora podemos escrever nosso teste como estamos acostumados nos testes de widgets, interceptamos o widget com a chave **txtName** e **lblWelcome** e verificamos se existe o widget na tela e se não está exibindo o texto “Olá Toshi”

![](https://cdn-images-1.medium.com/max/800/1*ODSaIV9x3FRUArn_vr5ptA.png)

Em seguida inserimos o texto “Toshi” dentro do **txtName** verificamos se a tela irá conter o texto “Olá Toshi”

![](https://cdn-images-1.medium.com/max/800/1*WzUdHHqY9rQqFrq1eOZozA.png)

Agora podemos rodar o teste executando:

> $ flutter test integration_test

O resultado será que nem a imagem abaixo

![](https://cdn-images-1.medium.com/max/800/1*9dOBAHIPbmKkYlRPY6ZrSg.gif)

Também conseguimos configurar em qual dispositivo queremos executar o teste, basta passar o parâmetro **-d**, por exemplo:

> $ flutter test integration_test -d windows

Isso irá executar o teste no Windows.

Vocês podem perceber que para executar um teste simples levou cerca de 28 segundos enquanto para executar 10 testes (entre unitário e de widgets) levou apenas 3 segundos, isso demonstra que o custo para executar testes de integração é muito maior.

![](https://cdn-images-1.medium.com/max/800/1*sJeuYKJ2Fk8HgCUJKUMOHw.png)

![](https://cdn-images-1.medium.com/max/800/1*TNW-qbOrBTwmI7UlyTTDaw.png)

Também conseguimos agrupar testes que nem nos testes de widgets.

![](https://cdn-images-1.medium.com/max/800/1*DCVADJeXmBBzA8qFLGcGlQ.png)

Viu só? é muito simples fazer teste de integração no flutter, também conseguimos integrar no Firebase e deixar configurado lá em quais dispositivos executar os testes e gerar artefatos dos testes, num próximo artigo posso estar trazendo para vocês como fazer.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obcg0d2y00yddve9quky.png)


Entre em nosso discord para interagir com a comunidade: https://discord.com/invite/flutterbrasil
https://linktr.ee/flutterbrasil