Entenda por que adicionar o PowerMock ao seu projeto é uma má ideia

Dherik Barison
CWI Software
Published in
2 min readJun 17, 2019

--

Photo by Luca Bravo on Unsplash

O PowerMock é um dos frameworks de teste unitário mais poderosos disponíveis para o Java. Seu objetivo é transpassar algumas limitações que os frameworks de testes unitários EasyMock e Mockito têm, fornecendo mais recursos para lidar com algumas situações específicas.

Estas situações incluem, basicamente, códigos que atualmente são difíceis de serem testados unitariamente. Códigos estes com algumas destas características, por exemplo:

  • Métodos estáticos que precisam ser evitados
  • Métodos privados que precisam ser testados, mas também precisam continuar como privados
  • Mockar a injeção de uma dependência quando está usando Field Injection

Entre outros.

O problema

Depois desta breve introdução, não é difícil reparar que a maior parte dos casos que o PowerMock entra como solução tratam-se de casos onde o problema poderia ter sido evitado ao escrever o código.

É por esta razão que o PowerMock normalmente aparece para lidar com código legado, onde temos um código já existente que precisa de testes unitários antes de qualquer alteração/refatoração no mesmo.

Agora, se você acaba de criar um projeto já com a dependência do PowerMock, eu sugiro voltar atrás e não cair na tentação de adicioná-lo ao seu projeto.

O motivo? Veja um exemplo a seguir.

Se você escreve uma classe com um método privado ou método estático e sente a necessidade de mockar eles para simplificar ou mesmo viabilizar seu teste, isto é um forte indício de que sua classe ou método estão fazendo muitas coisas. A presença do PowerMock pode encorajar os desenvolvedores, principalmente os menos experientes, a utilizá-lo, realizar o mock e seguir em frente, ao invés de fazer a refatoração necessária para evitar esta situação que irá cobrar seu preço mais tarde.

Um aviso parecido vem do próprio README do PowerMock:

Please note that PowerMock is mainly intended for people with expert knowledge in unit testing. Putting it in the hands of junior developers may cause more harm than good.

Por fim, encorajo a todos a tentarem remover a dependência do PowerMock de seu projetos, pois isto acaba sendo um dos diversos sinais que estamos diante de um código saudável. Se por acaso estiver lidando com código legado, PowerMock te ajudará a trilhar um caminho por testes unitários para que, no fim, ele também deixe de ser necessário e possa ser removido.

--

--

Dherik Barison
CWI Software

Java developer, Tech Lead, Stack Overflow enthusiast and contributor: https://dherik.com