DEV Community

Cover image for Teste de integração no Flutter
Toshi Ossada for flutterbrasil

Posted on

Teste de integração no Flutter

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

O projeto está no meu github https://github.com/toshiossada/flutterIntegrationTes

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.


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.

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.

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

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.

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”

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

Agora podemos rodar o teste executando:

$ flutter test integration_test

O resultado será que nem a imagem abaixo

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.

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

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

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

Top comments (0)