Um framework como o PHPUnit tem de resolver um conjunto de restrições, algumas das quais parecem estar sempre em conflito uns com os outros. Simultaneamente, os testes devem ser:
Fácil de aprender a se escrever
Se os testes não são fáceis de escrever, os desenvolvedores não escrevê-los.
Fácil de ler.
Código de teste não deve conter nenhum código extra para que o resultado do teste não fique comprometido com este código.
Fácil de executar.
Os testes devem funcionar com o toque de um botão e apresentar seus resultados em uma forma clara e inequívoca.
Rápida de executar.
Testes devem ser executado de modo que eles possam ser executados rapidamente centenas ou milhares de vezes por dia.
Isolado.
Os testes não devem afetar um ao outro. Se a ordem em que os testes são executados mudar, os resultados dos testes não deve mudar.
Combináveis.
Devemos ser capazes de executar qualquer número ou a combinação dos testes em conjunto. Este a natureza do isolamento (o motivo do isolamento dá razão ao combinável).
Se os testes não são fáceis de escrever, os desenvolvedores não escrevê-los.
Fácil de ler.
Código de teste não deve conter nenhum código extra para que o resultado do teste não fique comprometido com este código.
Fácil de executar.
Os testes devem funcionar com o toque de um botão e apresentar seus resultados em uma forma clara e inequívoca.
Rápida de executar.
Testes devem ser executado de modo que eles possam ser executados rapidamente centenas ou milhares de vezes por dia.
Isolado.
Os testes não devem afetar um ao outro. Se a ordem em que os testes são executados mudar, os resultados dos testes não deve mudar.
Combináveis.
Devemos ser capazes de executar qualquer número ou a combinação dos testes em conjunto. Este a natureza do isolamento (o motivo do isolamento dá razão ao combinável).
Há dois confrontos entre estas restrições:
Fácil de aprender a se escrever versus fácil de escrever.
Testes em geral, não exigem toda a flexibilidade de uma linguagem de programação. Muitas ferramentas de teste dispõe linguagem própria, que inclui apenas as características mínimas necessárias para escrever os testes. Os testes resultantes são fáceis de ler e escrever porque eles não têm nenhum ruído para distraí-lo do conteúdo das provas. No entanto, o aprendizado de ainda outra linguagem de programação e um conjunto de ferramentas de programação é inconveniente e confunde o pensamento.
Isolada versus rápido para executar.
Se você quer que os resultados de um teste não tenha qualquer efeito sobre os resultados de outro, cada teste deve criar o ambiente antes de começar a executar e devolver o ambiente ao seu estado original quando ele terminar. Contudo, a criação do ambiente pode levar um longo tempo: por exemplo, se conectar a um banco de dados e inicializa-lo a um estado conhecido, utilizando dados realistas.
Testes em geral, não exigem toda a flexibilidade de uma linguagem de programação. Muitas ferramentas de teste dispõe linguagem própria, que inclui apenas as características mínimas necessárias para escrever os testes. Os testes resultantes são fáceis de ler e escrever porque eles não têm nenhum ruído para distraí-lo do conteúdo das provas. No entanto, o aprendizado de ainda outra linguagem de programação e um conjunto de ferramentas de programação é inconveniente e confunde o pensamento.
Isolada versus rápido para executar.
Se você quer que os resultados de um teste não tenha qualquer efeito sobre os resultados de outro, cada teste deve criar o ambiente antes de começar a executar e devolver o ambiente ao seu estado original quando ele terminar. Contudo, a criação do ambiente pode levar um longo tempo: por exemplo, se conectar a um banco de dados e inicializa-lo a um estado conhecido, utilizando dados realistas.
PHPUnit tentativas de resolver esses conflitos usando PHP como linguagem de teste. Sometimes the full power of PHP is overkill for writing little straight-line tests, but by using PHP we leverage all the experience and tools programmers already have in place. Às vezes, todo o poder do PHP é overkill para escrever testes linha reta pouco, mas usando PHP Aproveitamos toda a experiência e os programadores de ferramentas já existentes. Since we are trying to convince reluctant testers, lowering the barrier to writing those initial tests is particularly important. Uma vez que estamos a tentar convencer os testadores relutante, abaixando a barreira de escrever os testes iniciais é particularmente importante.
PHPUnit errs on the side of isolation over quick execution. PHPUnit erra no lado de isolamento durante a execução rápida. Isolated tests are valuable because they provide high-quality feedback. Isolado testes são importantes porque fornecem feedback de alta qualidade. You do not get a report with a bunch of test failures, which were really caused because one test at the beginning of the suite failed and left the world messed up for the rest of the tests. Você não receberá um relatório com um monte de falhas nos testes, que foram realmente causadas por um teste no início da suite falhou e deixou o mundo confuso para o resto dos testes. This orientation towards isolated tests encourages designs with a large number of simple objects. Esta orientação para os testes isolados incentiva projetos com um grande número de objetos simples. Each object can be tested quickly in isolation. Cada objeto pode ser rapidamente testados isoladamente. The result is better designs and faster tests. O resultado é melhor os projetos e os testes mais rápidos.
PHPUnit assume que a maioria dos testes é bem-sucedido e não vale a pena relatar a detalhes de testes bem sucedidos. Quando um teste falha, esse fato é digno de nota e relatórios. A grande maioria dos testes deveriam ser bem sucedidos e não vale a pena comentar sobre eles a não ser para contar o número de testes que foram executados. Esta é uma suposição que realmente está construída nas classes de relatório e não no núcleo do PHPUnit. Quando os resultados de um teste são relatados, você vê qwuantos testes foram executados, mas você só ver os detalhes daqueles que falharam.
Os testes devem ser finos (bem pequenos), testar um aspecto de um objeto. Assim, a primeira vez que um teste falhar, a execução do teste pára, e PHPUnit relata a falha. É uma arte testar vários pequenos testes. Testes bem pequenos melhoram o design geral do sistema.
Quando você testar um objeto com PHPUnit, faça apenas através da interface pública do objeto. Teste baseado apenas no comportamento publicamente visível incentiva você a enfrentar e resolver problemas difíceis de design mais cedo, antes dos resultados da má concepção infectar grande parte do sistema.
Nenhum comentário:
Postar um comentário