Como testar melhor o código Java?

tenho trabalhado num sistema relativamente grande sozinho, e é a minha primeira vez a trabalhar num sistema grande(lidando com mais de 200 canais de informação simultaneamente). Sei como usar o Junit para testar todos os métodos e como testar as condições limite. Mas ainda assim, para o teste do sistema, eu preciso testar toda a interface e, provavelmente, algum teste de estresse também (talvez haja outras coisas para fazer, mas eu não sei o que eles são). Sou totalmente novo no mundo dos testes, e por favor dê-me algumas sugestões ou me indique alguma informação sobre como um bom Testador de código faria testes de Sistema.

PS: 2 perguntas específicas que tenho São:: como testar funções privadas? como testar interfaces e evitar efeitos colaterais?

Author: Carl Manaster, 2009-07-16

6 answers

Aqui estão dois sites que podem ajudar:

O primeiro é uma lista de ferramentas Java de código aberto . Muitas das ferramentas são addons para JUnit que permitem testes mais fáceis ou testes em um nível de integração mais elevado.

Dependendo do seu sistema, às vezes JUnit vai trabalhar para testes de sistema, mas a estrutura do teste pode ser diferente.

Quanto aos métodos privados, verifique esta questão (e a questão que ele refere).

Não podes testar interfaces( como não há comportamento), mas você pode criar uma classe de teste base abstrata para testar que implementações de uma interface seguem seu contrato.

Editar: também, se você não tiver já testes de unidade, confira trabalhando eficazmente com o código legado ; é um código de teste que não está bem configurado para testes.

 6
Author: Kathy Van Stone, 2017-05-23 12:16:55

Zombando é uma boa maneira de ser capaz de simular o sistema de testes de testes de unidade; substituindo (zombando) os recursos sobre a qual o outro componente depende, você pode executar testes de unidade em um sistema de "como" ambiente sem a necessidade de ter todo o sistema construído para fazê-lo.

Quanto às suas perguntas específicas: geralmente, não deve usar testes unitários para testar funções privadas; se são privadas, são privadas para a classe. Se precisar de testar algo, testar um método público que usa esse método privado para fazer alguma coisa. Evitar efeitos colaterais que podem ser potencialmente problemáticos é melhor feito usando um ambiente de teste completo (que pode facilmente ser limpo de volta a um estado "virgem") ou usando troça, como descrito acima. E testar interfaces é feito, bem, testando os métodos de interface.

 3
Author: Paul Sonier, 2009-07-16 17:44:54
Em primeiro lugar, se já tem um sistema grande que não tem testes unitários, e está a planear adicionar alguns, então permita-me dar alguns conselhos gerais. De manter o sistema e trabalhar com ele, você provavelmente já saberá as áreas do sistema que tendem a ser mais sujas, que tendem a mudar muitas vezes e que tendem a não mudar muito. Se não o fizer, você pode sempre olhar através dos logs de controle de fonte (você está usando o controle de fonte, certo?) para descobrir onde a maioria das correções e mudanças de bug estão concentradas. Concentre seus esforços de teste nestas classes e métodos. Há uma regra geral chamada regra 80/20 que é aplicável a toda uma série de coisas, sendo esta uma delas. [[1]diz que, aproximadamente em média, você deve ser capaz de cobrir 80 por cento dos casos ofensivos, fazendo apenas 20% do trabalho. Isto é, ao escrever testes para apenas 20% do código, você provavelmente pode pegar 80% dos bugs e regressões. Isso é ... porque a maioria do frágil código, comumente alterado código e o pior código ofensivo constitui apenas 20% da base de código. Na verdade, pode ser ainda menos.

Deve usar o junit para fazer isto e deve usar algo como JMock ou outra biblioteca de troça para garantir que está a testar em isolamento. Para testes de Sistema / Integração, isto é, testes de coisas enquanto eles estão trabalhando juntos, eu posso recomendar FitNesse. Tive uma boa experiência com isso no passado. Ele permite-lhe escrever o seu teste num navegador web usando layouts simples, em que pode definir facilmente as suas entradas e Saídas esperadas. Tudo o que você tem a fazer é escrever uma pequena classe de suporte chamada de uma instalação, que lida com a criação dos componentes.

 3
Author: IRBMe, 2009-07-16 18:01:27

As funções privadas serão testadas quando as funções públicas que as designam. Seu teste da função pública só se importa que o resultado retornado é correto.

Ao lidar com a API (para outros pacotes ou URLS ou até mesmo para file/network/database) você deve zombá-los. Um bom teste de unidade deve ser executado em alguns milissegundos não em segundos. Gozar é a única maneira de fazer isso. Isso significa que bugs entre pacotes podem ser tratados com muito mais fácil do que bugs lógicos no nível funcional. Para Java easymock é uma estrutura muito boa para zombar.

 2
Author: AutomatedTester, 2009-07-16 18:01:05

Pode dar uma vista de olhos nesta lista : Ferramentas para testes de regressão / automação de teste da aplicação java centrada na base de dados? para uma lista de ferramentas interessantes.

Como já parece usar o Junit extensivamente, significa que já está" infectado por teste", é um bom ponto de vista... Na minha experiência pessoal, a coisa mais difícil de gerir são os dados. Quero dizer, controlando de forma muito aguda os dados que os testes são executados.
 1
Author: Michael Zilbermann, 2017-05-23 12:33:51

As listas de ferramentas dadas antes são úteis. Por experiência própria, estas são as ferramentas que considero úteis:

O Mockito é uma excelente implementação e tem técnicas inteligentes para garantir que só temos de zombar dos métodos que realmente gostamos.

O teste da Base de dados - DBunit é insensível para configurar os dados dos testes e verificar as interacções da base de dados.

Teste de Stress - Jmeter - uma vez que se vê passar a gui ligeiramente desajeitada trata-se de uma ferramenta muito robusta para a definição de cenários e a realização de testes de esforço. Quanto à abordagem geral, comece por tentar fazer com que os testes corram para os habituais "caminhos felizes" através da sua aplicação, estes podem constituir uma base para testes de regressão e testes de desempenho. Uma vez que isto está completo, você pode começar a olhar para casos de borda e cenários de erro.

Embora este nível de ensaio deva ser secundário aos bons ensaios unitários.

Boa sorte!
 0
Author: Pablojim, 2009-07-16 20:00:32