Pular para o conteúdo

#02 Testes unitários no Android com mockito, jUnit e kotlin

Nesse primeiro vídeo quero mostrar alguns benefícios de aplicar testes unitário no Android e ter nosso primeiro código implementado.

Mais um vídeo aqui do canal deve vai longe hoje eu vou ensinar para vocês um pouco sobre teste unitário a gente vai ver um pouco da biblioteca g-unit na biblioteca mosquito e aplicar nosso primeiro teste unitário aqui da playlist de testes para android então bora pro vídeo é tá bom se você não me conhece meu nome é rock buarque eu sou desenvolvedor android há mais

De sete anos atualmente eu moro e trabalho aqui na alemanha em berlim se você quer acompanhar um pouco mais do meu dia a dia pode me seguir aí no instagram eu posso sempre lá nos stories e já quero pedir para você se inscrever no canal porque é só o começo dessa playlist vai ter muito conteúdo bacana por aqui mas antes de começar a compartilhar a tela com vocês

Aqui de fato colocar a mão na massa eu quero muito que você preste atenção porque é muito importante que eu vou falar agora muitas vezes nesses tutoriais de código a gente quer passar logo vê logo o código ver funcionar e às vezes a gente não entende muito porque das coisas e a gente acaba sendo aquela pessoa que memoriza como é feito sabe escrever e replicar

Aquilo então você vai saber escrever teste unitário mas não vai entender a base daquilo minha principal missão e nessa playlist é trazer a base para vocês sobre testes para que você consiga entender quando aplicar onde aplicar e quais os benefícios disso e uma coisa muito interessante sobre testes quando comecei há realmente dá a real prioridade nisso e escrever

Meu código pensando em testes primeiro comecei a pensar de ante-mão já alguns que a gente chama de é the cases the corner case né alguns casos de canto ali que talvez numa implementação normal eu passaria despercebido mas como eu de ante-mão já começa a pensar em como aplicar testes para aquele código ou algumas vezes já escrevo o teste antes de fazer a real

Implementação para cobrir todos os cenários daquele código eu trago uma qualidade muito mais alta para o meu projeto por muitas vezes eu era uma pessoa que escreveria código o código não se comportava e eu apagava escrevi de novo apagava até que uma hora eu escrevi e o código funcionava e tudo bem se você faz isso hoje em dia e se você se identificou com isso o

Problema desse tipo de código aqui algumas vezes você tentou adivinhar o que o código ia fazer e conseguiu acertar ele que o código passar se não necessariamente você cobriu todos os cenários que aquele código precisava cobrir ele mas quando você pensa em testes antes de fazer a sua implementação você consegue ter uma visão mais ampla do que você precisa cobrir

Então você acaba tendo uma estratégia na sua implementação aí sim você começa a trazer essa skill de software engenheiro você não é só uma pessoa que tá digitando o código ali porque você sabe digitar o código escrever uma linguagem de programação mas você entende a complexidade de um software e de ante-mão você já consegue prever alguns cenários econ

E no seus testes falando nisso um projeto que tem testes ele já mostra para mim que ele é um projeto que tem no mínimo uma estrutura desacoplada para conseguir aplicar esses testes a gente vai ver tudo isso na prática mas o que eu quero passar para vocês antes da gente ir para o código é esse mais de 7 esse jeito de pensar estratégico que o teste traz para você

Na hora de implementar uma solução vamos passar agora então para a documentação do google dá uma breve e da lei no que eles falam para gente no treinamento e depois aplicar o teste unitário no nosso projetinho android bom então como você pode ver passando aqui um pouco agora para documentação do google né esse trem teste local teste então ele tá falando sobre

Bill do local e eu nem teste beleza vamos colocar um pouquinho aqui mostrar algumas informações para vocês mas eu super indico depois e aí na descrição você realmente parar e dá uma olhada dá uma lida nessa documentação ver se você aprende um pouquinho mais também fora desse vídeo então vamos lá uma coisa bem interessante que eu notei aqui ó que ele explica

Um pouco sobre teste unitário então ele fala que teste unitário tem que verificar o comportamento de uma parte pequena do código então uma parte de alexander teste tá bom então ele tem que executar uma parte de um código e checar esse resultado beleza então isso é bem interessante é bem sutil ali mas é bem interessante se escorou na um pouquinho mais aqui ó ele

Fala uma coisa bem interessante que é sobre que eu tava comentando sobre estrutura do código né então para você rodar um teste unitário isolado você precisa que as dependências ele fala aqui né sejam trocadas por componentes que você controla então como eu falei né quando se fala sobre um projeto um teste o projeto que tem teste então ele já significa que ele

Tem uma certa estrutura ali no vídeo anterior né na introdução dessa playlist a gente falou um pouquinho passou por esse artigo aqui do que testar não sai desse vídeo vai ver o vídeo anterior mas você não viu no final desse vídeo volta lá e assiste ele é um pouco mais teórico do que o vídeo de hoje porém ele é muito interessante para você ter uma noção

Do que você vai encontrar aqui nessa playlist scrollando um pouquinho mais para baixo aqui fala um pouco sobre as dependências né e o que eu quero enfatizar que principalmente a gente vai utilizar o dia ione de quatro nesse nesse teste de hoje a gente vai utilizar o mosquito tá bom aqui fala algumas outras dependências e olha que bacana fala sobre o grego se você não

Tem muito conhecimento né e o teste implementation ele basicamente ele adiciona né dependências simplesmente que estão dentro daquele o teste ele não vai adicionar dependências no seu projeto ele só vai conseguir usar por exemplo classes do james somente dentro do diretório de testes bom scrollando um pouquinho aqui mais para baixo ele fala sobre criando o primeiro

E único teste então a primeira vez que a gente vai ver aqui já um código tá bom a gente já vê anotação aqui do dia yurich para teste e nesse teste aqui ele é simplesmente estava lidando aqui uma função estática não tem independência nenhuma que dado a um e-mail válido deve retornar verdadeiro indo um pouquinho mais para baixo que a parte mais interessante

Vamos começar do começo né e se vê que tem alguns comentários aqui que é o given when you then então passa um pouquinho aqui para mim depois a gente volta para o código então geralmente essa é uma maneira de você estruturar o seu código isso vai te dar um direcionamento de como que você precisa testar a given não é traduzida para o português é dado dado

Alguma entrada ou é então quando né quando executar o código que você precisa testar de verifica acerta se o valor o resultado é o resultado esperado então voltando lá para o código agora a gente vê que dado a entrada aqui né do get string com essa spring específica aqui the name label retorna fake stream when então quando né essa função aqui de get name

For chamada então essa função de gap meme é a função que é a função que está sendo testada há unicamente a gente só quer saber o resultado dessa função aqui saindo implementação dessa função está correta então o resultado deve ser o resultado esperado então seja quando eu chamar o gato nem porque o mokei aqui o contexto eu falei para o contexto sempre

Quando eu chamar o jet stream o redor na frente stream quando eu chamar o gato nem ele já espera aqui o resultado seja o fake spring então ele acertou ali o resultado beleza então vamos passar agora para o nosso projeto do android studio e lá vamos desacoplar um pouquinho o projeto que tá acoplado criar uma estrutura e aplicar um teste unitário na prática então

Eu simplesmente vim aqui criei um novo projeto do android studio ele é um projeto cru por enquanto tá bom se você vir aqui na parte de teste você vai ver que já tem os dois diretórios de testes aqui criados está vendo isso você for na parte de layout você vai ver que tem um layout já criado também também né é um layout aí tá escrito o hello world carol

Projetinho que já é criado sempre quando você faz o novo projeto ali do android studio e o que acontece é que quando você roda esse projeto né nenhum aplicativo e 11 device ele vai mostrar essa mensagem hello word para você qual o principal problema que tem nesse código ele sempre mostra o hello world ele e a gente não consegue validar unitariamente que esse hello

World tá chegando para o usuário então a gente vai como eu falei a gente vai desacoplar um pouco esse hello-word vai usar aquele exemplo do google onde ele mostra o contexto para dar uma string e vai colocar um teste unitário nesse código então a primeira coisa que eu quero fazer vim aqui no velos vim aqui na stringhi e colocar uma nova string que seria o hello world

É perfeito a gente tem a string eu vou vir aqui no ver se vou colocar essa estranho aqui somente como tos não se preocupa se você não sabe muito bem o que é isso por enquanto não é importante tá bom vou colocar um eyed aqui vou colocar de o sexo civil tython apesar que isso não é importante para a gente nesse momento como a gente vai aplicar o teste unitário eu

Não realmente não vou validar esse teste viu por hora vou vir aqui no pacote principal e criar uma classe como disse na gente precisa criar uma classe uma estrutura as dependências para que a gente consiga testar unitariamente isso isoladamente né então vamos lá vou chamar de conter swapper e essa classe vai ter uma dependência do contexto né do contexto do android

Em se vai ter uma função chamada get titon que vai nos devolver uma string que é bom então eu vou retornar que eu mais tenho que vou falar para o contexto. g’ at stream passando r. estream.to hello world tá vendo algumas semelhanças com o código lá do google no código do google ele chamou de get name no nosso a gente chama de get away tom e a gente passa o hello

World aqui é basicamente eu tô criando a mesma estrutura que o google criou ali para aplicar esse teste mostrar para vocês como a gente está desacoplando nosso projeto inicial que vem do google e colocando um teste unitário nele ver um teste de exemplo inclusivo e levando você para documentação de testes aqui do próprio google tá bom esse teste aquele já válida

Tem um acerto não tá vendo ele já válida se 2 + 2 = 4 se você for dar esse teste aqui ele vai dar positivo tá aí acertando usando aqui o a biblioteca do jhony para acertar bom pessoal peguei o eu joguei aqui tá bom uma antiga o nome da minha classe só tem algumas coisas do código do google o que é diferente da minha por exemplo a classe que tá sobre o teste ali

A minha chama conta swiper então vou chamar de contas rapper a função aqui ao invés seguet name at tom tá bom e aqui ao invés de ser name label a gente chamou de hello world tá bom então dado um hello world vai retornar o fake string e aí aqui a gente vai validar o resultado bem vale do resultado qual que é o resultado esperado fake stream em constante vale aqui

Que é o mesmo que tava do google então aí você tá esperando aqui que retorna um hello world tá vendo só que ele tá mocando uma fake spring então esse código aqui provavelmente ele não vai passar vou executar ele e olha ele não passou e é bem interessante ele não passar para vocês verem também como que funciona é qual que é a mensagem de erro que aparece

Ele fala aqui ó o esperado foi uma fake strang mas o atual que veio foi uma hello work também então ele já falou tá vindo diferente porque quando eu chamo isso daqui era para vir infectrin tá vendo o duro é tá mas você tá comparando um hello world você não tá comparando um feitiço tem uma maneira de você corrigir isso você quer jogar esse cara aqui para

Cima tá bom ou você utilizar essa mesma constante para manutenção do código fica mais fácil então agora eu falo que sempre quando eu chamar o jet stream agora ele passou tá vendo sempre que eu chamar o get string aqui ele vai me retornar passando o hello world ele vai me retornar um feito spring é porque rock que você tá mocando esse get through do contexto o

Que que isso tem a ver com o get eu acho e se a gente navegar para dentro do gueto a gente vai ver que a implementação dele é chamando um contexto chamando get string guiné e passando o hello world então o que que a gente tá fazendo lá no nosso teste a gente tá mocando esse resultado da implementação a quente mooca essa implementação fala sempre quando o meu

Contexto chamar get tram passando o hello world ele vai me devolver feito estranho vai me devolver isso daqui ó e aí depois eu cheque ou se realmente e esse meu código está funcionando por exemplo agora vou chegar aqui e vou mudar aí veste amarelo world eu vou chamar up name isso daqui vai invalidar o meu moque aqui não vou conseguir mocar mais porque o meu moc só

Funciona quando eu estou chamando um hello world então seja durante além de uma nova implementação eu mudei a forma com que foi implementado get python então o meu teste unitário ele tem cobrir isso e me avisar que houve um erro bom então meu teste unitário ele vale do ali ele falou olha houve um erro porque que ele tá dando nulo aqui ele tá falando ela tá vou tá

Retornando nulo porque o moc ele não conseguiu encontrar os critérios dele ele falou consigo marcar somente quando tá passando o hello world eu não consigo mocar quando você tá passando fm então ele já deu erro ali no teste unitário tá bom e como que eu iria utilizar esse contexto ópera aqui então vamos lá para o nosso meio activity eu vou fazer um saem devil’

By red aqui só de exemplo e aí o quê eu chamarei o meu contax walker aqui oi oi tô passando activity quer um contexto e daqui eu falei à tarde tô pronto text e conseguiria fazer o contecc swiper. quiet tom então aqui odisaco play aquele código que tava sempre mostrando hello-word direto lá no layout trouxe né isolei ele dentro desse contexto loper aqui eu consigo

Testar então volta para o hello world que a implementação correta e se alguém mexer nisso e mudar isso provavelmente o meu teste unitário vai falhar e eu consegui unitariamente testar que o resultado final ali mostrado para o usuário é o meu resultado esperado então a gente conseguiu ali testar bastante coisa colocar a mão na massa com o teste unitário foi só

O primeiro preview ali muito desses códigos eu não escreveria não colocarei o contexto dessa maneira foi só para mostrar para vocês ali um pouco dessa estrutura de teste como isolar como desacoplar alguma coisa usando ali o given when you then para o nosso o projeto para aplicar o nosso próprio teste unitário a gente vai ver muito mais coisas sobre teste unitário

Sobre fake sobre arquitetura também para aplicar o teste unitário nos próximos vídeos eu espero que você tenha gostado desse vídeo se gostou já deixa o seu like é muito importante para mim manda nos grupos nas comunidades de android para galera que precisa que quer aprender mais sobre teste também compartilha com as pessoas que você conhece que tá aprendendo

Desenvolvimento android ou aquelas pessoas que já sabem também mas querem reforçar esse conhecimento sobre testes eu vou ficando por aqui então eu te vejo no próximo vídeo e aí

Transcrito do video
#02 Testes unitários no Android com mockito, jUnit e kotlin. By Dev Vai Longe