No contexto do curso, quando é mencionado o termo "testes automatizados", entendo que o conceito mais adequado aos testes apresentados em aula seria o de testes unitários (ou testes de unidade). Isso ocorre porque estamos verificando componentes individuais de forma isolada, utilizando ferramentas como o JUnit 5 em conjunto com o Mockito para simular dependências e garantir que as unidades de código se comportem como esperado.
Entretanto, na prática de mercado, o termo "testes automatizados" abrange um escopo mais amplo. Ele geralmente se refere a testes que são projetados para serem executados de forma contínua em uma pipeline de CI/CD (Continuous Integration/Continuous Deployment). Esses testes automatizados podem incluir diferentes níveis, como testes de integração, testes de sistema e testes de aceitação. O objetivo principal é assegurar a qualidade do software de ponta a ponta, além de gerar relatórios detalhados, como a cobertura de testes enviada para ferramentas como o SonarQube.
Por exemplo, ferramentas como o Cucumber são amplamente utilizadas para escrever cenários de teste em formato BDD (Behavior-Driven Development). Essa abordagem permite que testes automatizados sejam mais legíveis e compreensíveis para stakeholders técnicos e não técnicos. No Cucumber, os cenários de teste são escritos em linguagem Gherkin, permitindo uma descrição clara e humanizada dos comportamentos esperados do sistema.
É importante destacar que testes unitários e testes automatizados mais amplos não se excluem, mas se complementam. Os testes unitários são essenciais para garantir a qualidade no nível de componentes individuais, enquanto os testes automatizados de integração ou aceitação asseguram que os diferentes módulos funcionem bem juntos e atendam aos requisitos funcionais e não funcionais.
Por fim, práticas recomendadas sugerem que:
- Testes unitários devem ser executados localmente por desenvolvedores durante o ciclo de desenvolvimento.
- Testes automatizados de nível superior devem ser integrados à esteira de CI/CD para garantir qualidade contínua.
- A cobertura de código deve ser acompanhada por ferramentas como SonarQube, mas sempre analisada de forma crítica, já que cobertura alta não garante ausência de bugs, mas sim maior confiança no código testado.
Essas práticas proporcionam uma estratégia abrangente de testes que ajuda a entregar software de alta qualidade, alinhado aos objetivos do projeto e às expectativas do cliente.