É difícil de criar testes pro seu JavaScript? Seu código provavelmente se compara à uma macarronada!

O problema da macarronada na hora de criar testes unitários

Antes de falar sobre testes unitários, precisamos falar sobre o seu código!

Uma das coisas mais difíceis na vida de um programador que decidiu usar testes unitários é não entender o porque de ser tão difícil e complicado no começo. Principalmente se o projeto já tiver uma certa idade e seu código fonte tiver sido feito sem padrões claros, cheio de gambiarras (POG¹) e com acoplamentos gigantescos. Sério, é desanimador no começo. Se você não der a devida importância à isso, será muito, muito complicado de criar testes pros seus códigos!

Porque é difícil criar testes para meu código?

Na minha experiência com testes unitários, no início, lembro que desisti por algumas vezes por achar complicado de mais. Para cada teste unitário que eu criava eu precisava criar uma estrutura absurdamente grande pra passar pro método que eu estava testando. O método em questão pedia muitos parâmetros, alguns deles do tipo DataTable, ou pior ainda, DataSet com vários DataTables dentro. Consegue imaginar o tamanho do trabalho necessário pra criar um Mock² pra isso?

Depois de muito queimar neurônios com isso, passei a entender que, na verdade, os testes unitários não são os culpados. A culpa estava no código a ser testado! Esse código parecia uma macarronada (um emaranhado de código dentro de um só método que se propõe a fazer tudo).

A estrutura do seu código

Se você está tentando criar testes unitários e está com a sensação de que está muito difícil  e complicado, certamente o seu código não está bem estruturado e precisa ser re-escrito. Note que, refatorar às vezes não resolve (e refatorar é muito diferente de re-escrever). Dependendo da condição atual do seu método/classe, você precisará transformar seu código em diversas classes com diversos métodos. Só assim você poderá criar testes realmente unitários.

Criar testes unitários faz com que você tenha um código muito melhor escrito, pois, eles te obrigam a organizar melhor, separar as responsabilidades, isolar os escopos, criar classes menores e que tenham uma única responsabilidade com métodos mais claros que executem somente uma ação. Não é fácil quando se tem a mania de criar métodos gigantes que fazem tudo num só lugar, mas tem como mudar isso. Eu recomendo fortemente que, se você tem tais problemas, compre o livro Código Limpo. Esse livro vai mudar a forma como você programa!

Criar testes unitários é muito mais do que usar uma ferramenta de testes, é uma nova forma de criar suas soluções, é uma nova forma de criar seus códigos. Se você não estiver disposto a abrir mão da macarronada pra escrever um bom código, lamento mas, você vai falhar em implementar testes unitários. E se insistir, os testes unitários que você criar sobre códigos “macarrônicos” vão ser seu pior pesadelo quando você precisar mudar uma única variável no código “testado”.

Princípios SOLID

Se você ainda não conhece os princípios SOLID (http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod), trate de conhecer. Tem diversos blogs na internet que explicam muito bem cada um dos princípios. Recomendo fortemente que você passe a aplicar tais princípios, pois, sem isso, você vai novamente falhar em escrever testes unitários para seu amável código.

Como dá pra perceber, e como eu percebi por experiência própria, criar testes unitários requer mudanças profundas na forma de desenvolver uma solução, na forma de pensar na estrutura da solução. Se você precisa de um ponto de partida para escrever um código melhor, leia o livro Código Limpo. É um investimento com um retorno absurdamente alto, mas você precisa querer isso!

Precisa de ajuda ou de orientação?

Se você precisar de ajuda pra entender melhor o assunto, ou se precisa de dicas e sugestões, ou até mesmo de uma orientação, você pode entrar em contato comigo aqui: http://jonwldwblog.azurewebsites.net/contato/.

  • POG¹: Programação Orientada a Gambiarra.
  • Mock²: Estrutura “fake” necessária pra executar um método em um teste unitário simulando um ambiente real.

1 thought on “O problema da macarronada na hora de criar testes unitários”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.