[MÚSICA] [MÚSICA] Olá a todos. Meu nome é Eduardo Guerra. Este é o meu chapéu de TDD. Estamos no curso de Desenvolvimento de Software Guiados por Teste. Hoje vamos fazer o nosso segundo hands on de TDD, hoje usando aqui o nosso chapéu do TDD. A gente vai desenvolver tradutor, está? A gente vai adicionar as palavras e ele vai retornar a tradução para a gente, está? E uma recomendação que eu dou, uma dica que eu dou para você que está começando no TDD é fazer uma lista igual essa daqui com as funcionalidades. Não são bem funcionalidades, com os casos de teste, não é? Com os cenários que você quer, eh, eh, que a sua classe ou o seu software resolva, está? Então, vamos parar de conversa e vamos ao que interessa. Então, aqui no Eclipse, não é? Como sempre, eu começo com a criação de novo projeto Java. Eu vou chamar ele de tradutor. Então, tradutor. Como vocês podem observar, eu tenho eu estou aqui com o meu, meu chapéu vermelho então, eu vou começar fazendo o teste, não é? Vou começar fazendo eh, o teste falhar. Eh, no caso eu não tenho nem teste ainda para falhar mas, a gente vai começar por aí. Então, eu começo aqui adicionando JUnit, não é, para ele já acrescentar ele ali para mim. Eu vou chamar ele de teste tradutor. Vou adicionar o JUnit. Vamos lá, vamos ver qual é o primeiro teste a ser criado. Segundo a nossa lista aqui é tradutor sem palavras. Então eh, eh, como é que eu testo tradutor sem palavras? Não sei. Vamos ver aqui. Tradutor sem palavras. Vamos pensar aqui como é que seria isso, não é? Então eu vou pegar aqui. Vou, eh, eh, vou criar novo tradutor, não é? Tradutor t é igual a new Tradutor, não é? Bom, como ele está sem palavras, eu vou verificar se ele está vazio, não é? Então, eu vou criar aqui assertTrue, eh, estaVazio. Opa, faltou ali o t.estaVazio, certo? Então, eu criei o meu teste. Bom, eu considero ainda como parte do teste você fazer ele compilar, ok? Então eu ainda estou com o meu chapéuzinho vermelho aqui, está? Então eu vou vir aqui, vou usar o Eclipse aqui. Olha lá, criar classe tradutor, então ok. Ele criou ali a classe tradutor e o estaVazio. Eu vou clicar aqui. Opa. Também, só para fazer ele compilar. Então, eu salvo tudo aqui, não é? Agora, eu tenho o teste, não é? Vou rodar ele aqui. Será que ele vai falhar? Vamos lá, roda esse negócio. Rodei o meu teste. Olha lá, falhou. Então, agora eu posso trocar para o chapéu verde, onde o meu papel agora é fazer este teste aqui passar. Está? Então, a única coisa que ele precisa aqui é, é o tradutor estaVazio, não é? Eu vou vir aqui, simplesmente, eu vou dar returnTrue. Então, vou salvar aqui, vou rodar o meu teste e o teste passa. Então, eu posso vir aqui e dar ok na minha funcionalidade inicial ali do tradutor sem palavras, está? Eh, agora seria a vez da refatoração. Mas, o meu código está pequeno ainda. Eu não preciso refatorar, por enquanto. Está? Então, vou voltar aqui para o meu chapéuzinho vermelho e vou criar o próximo teste que é de uma tradução. Então, vamos lá. Vamos criar aqui. Test public void umaTraducao. Então eh, eu vou vir aqui, vou criar o meu tradutor, t é igual a newTradutor Então, eu vou adicionar uma palavra. Não é? Então, eu vou adicionar a palavra com a tradução dela. Então, eu vou vir aqui, t ponto adicionaPalavra e vou adicionar o quê? Deixa eu pensar aqui. Eu vou adicionar aqui, que bom é good, certo? Então, eu vou vir aqui, não é? Eu vou pegar aqui. Agora, eu vou dar assertFalse estaVazio, não é, ou seja, ele não pode estar mais vazio e eu vou ter, verificar a tradução, não é? Então, eu vou fazer aqui assert Equals. Então, se eu perguntar para ele qual é que é a tradução de bom, ele tem que dizer que é good. Não é? Então, t.traduzir. Eh. Eu vou colocar aqui, traduzir bom, não é, ele tem que traduzir como good. Está? Então, ainda como parte do meu teste, eu vou fazer isso, eh, eh, compilar, não é, ou seja, eu vou criar os métodos que não existem. Então criei aqui. Criei aqui. Então, vou salvar aqui. Certo? Agora, eu já posso rodar o meu teste e ver ele falhar. Então, já estou pronto para trocar para o meu chapéuzinho verde. Está? Então, vamos aqui no nosso tradutor. Eh, eh, ver como é que eu posso fazer isso aqui. Está? Então, a primeira coisa, quando o Eclipse cria, ele coloca aqui uns nomes mais genéricos aqui de parâmetro, não é? Eh, então, eu vou, vou melhorar aqui. Eu vou colocar o primeiro como palavra. Então, vou botar aqui palavra e o segundo vai ser a tradução. E aqui, ele vai perguntar a palavra. Vamos só ver aqui, no teste para ver. Então, o primeiro aqui, a palavra, não é, o bom e aqui ele também está passando a palavra. Então, o que eu preciso fazer aqui? Preciso guardar só a tradução por enquanto, não é? Então, tradução, não é? Vou criar aqui como privado. Então, eu vou verificar aqui. Eu vou guardar essa tradução aqui, this.traducao é igual a tradução. [SEM ÁUDIO] E aqui, no método traduzir, eu vou retornar a tradução. Vou salvar, vou rodar. Opa, ainda está com problema. Onde é que é? Aqui é no estaVazio, eu esqueci do estaVazio. Então, ele vai estar vazio quando a tradução for igual a null, não é? Ele retorna ali uma expressão boleana aqui, que faz essa verificação. Vou botar assim para ficar mais claro. Então eu salvo, rodo. Ok, então está funcionando. Agora, é a vez do meu chapéu da refatoração. Tem alguma coisa que eu quero mudar aqui? Tem, está? Eu estava pensando melhor, eu acho que adicionar palavra, na verdade eu não estou adicionando uma palavra, eu estou adicionando uma tradução para uma palavra. Então no meu tradutor aqui, como eu é que tenho de traduzir, eu acho que, de repente, esse método aqui o melhor nome para ele seria adicionar tradução e não adicionar palavra. Então, eu vou vir aqui vou refatorar. Note que eu estou o tempo todo pensando na nomenclatura aqui e isso é importante também, não é? Adicionar, adicionaTraducao, está? E aí como eu usei o refatorar aqui do Eclipse, ele vai também já alterar quem faz essa. Está vendo. alterou aqui no teste, também. Então, não posso esquecer de quando eu estou refatorando, eu não, eu só estou mudando a estrutura. Não posso mudar, nem a minha classe, nem o meu teste. Eu vou rodar, de novo aqui e está passando. Eu posso já marcar aqui, que eu implementei isso daqui. E os próximos aqui, a gente já vai ver no próximo hands on, está certo? Na próxima parte desse hands on. Muito obrigado, continua assistindo. [MÚSICA]