Pergunta

Como generalizada, apoiada, desenvolvida está testando no mundo PHP? A par com Java? Até lá, com Ruby / Rails? Eu pesquisei e descobri que existem estruturas de teste, mas eu estou querendo saber se eles estão amplamente utilizado.

fazer as principais do PHP IDE têm embutido corredores de teste da maneira ferramentas Java do Eclipse fazer ou Ruby NetBeans / Rails ferramentas fazer? Está testando construído em frameworks MVC do PHP como com Rails?

Eu pergunto porque um grupo onde eu trabalho quer contratar alguém para desenvolver um aplicativo PHP para eles. Estou preocupado com a qualidade e manutenção como eu poderia ser chamados a apoiar essa coisa.

Foi útil?

Solução

Há pelo menos dois amadurecer, stand-alone, conjuntos de testes de estilo JUnit disponíveis, chamado PHPUnit e < a href = "http://www.simpletest.org/" rel = "noreferrer"> SimpleTest , respectivamente.

No que diz respeito aos quadros MVC ir, Symfony tem o seu quadro próprio teste chamado cal , Code Igniter tem um unit_test biblioteca e CakePHP conta com o já mencionado SimpleTest.

Eu sei que Zend Studio tem suporte embutido para testes PHPUnit, e ambos PHPUnit e SimpleTest tem corredores de linha de comando para integração em qualquer fluxo de trabalho é possível.

As ferramentas estão lá no mundo do PHP se um desenvolvedor quer tirar proveito deles, e lojas inteligentes fazem tirar proveito deles.

As advertências são o seu par para as queixas curso de PHP. Há duas comunidades PHP; PHP como uma plataforma para a construção de software, e PHP como uma forma de interagir com um servidor web, o navegador web e banco de dados para produzir aplicativos de que as coisas na web. É menos uma coisa em preto e branco e mais um continuum; Entre os mais sobre o teste de unidade lado desenvolvedor de software e TDD é suportado e usado tanto como ele é em qualquer outra plataforma. Entre os "remendar um monte de coisas que eu não entendo, mas ainda obter resultados povo", é inédito.

Há um monte de não-estrutura / código legado PHP custom-estrutura em torno de que é difícil conseguir um equipamento de teste útil ao redor. PHP também se presta facilmente a padrões que dependem da existência de um ambiente de navegador para ser executado. Eu não tenho nenhuma evidência para apoiar isso diferente de minhas próprias observações, mas um monte de lojas PHP que o cuidado sobre o teste acabam confiando em testes de aceitação (ou seja, selênio) como um substituto para o teste real Unit, teste anterior, etc . desenvolvimento.

No seu caso específico, entrevistar o inferno fora do desenvolvedor seu grupo vai contratar.

  1. Pergunte a eles o framework de testes unitários eles usam

  2. Peça-lhes para descrever, em termos gerais, um exemplo real de um tempo, eles desenvolveram um novo recurso e seus testes de apoio

  3. Peça-lhes para descrever, em termos gerais, um exemplo real de um tempo seus testes falhou eo que eles fizeram para resolver a situação

Você está menos interessado na situação específica que eles estão indo para descrever e mais interessados ??em quão confortável eles estão discutindo seu conhecimento de teste de código em geral.

Outras dicas

Sempre que eu TDD um projeto com estilo ferramentas xUnit, tenho dificuldade em obter a minha cabeça no lugar certo. Eu acho que o uso de ferramentas projetadas para Behavior Driven Development ou " Especificação por exemplo " faz com que seja mais fácil para mim < a href = "http://gojko.net/2010/12/02/the-principle-of-symmetric-change/" rel = "noreferrer"> fazer TDD direito - ou seja, foco no design, expondo intenção e descrever o comportamento em contextos específicos . não testing.

Dito isso, eu gostaria de apresentar pecs na conversa. Desde o readme no site do projeto.

pecs é uma pequena biblioteca Behavior Driven Development para PHP 5.3, a la RSpec ou JSpec.

Se você já usou JSpec ou melhor ainda, Jasmine-BDD (para JavaScript) o estilo pecs de descrever o comportamento deve ser muito familiar. I encontrar este grande estilo para specs nível do componente. Se você está procurando uma ferramenta de PHP para obter as especificações de nível de recurso (histórias ou testes de aceitação do usuário) consideram Behat .

Voltando ao pecs, aqui está um exemplo abatidos a partir as pecs Local do Projeto:

describe("Bowling", function() {
  it("should score 0 for a gutter game", function() {
    $bowling = new Bowling();
    for ($i=0; $i < 20; $i++) {
      $bowling->hit(0);
    }
    expect($bowling->score)->to_equal(0);
  });
});

Sim, isso é uma especificação PHP. Olhando através da fonte pecs, parece que o autor é capaz de conseguir isso, aproveitando o hotness novo em PHP 5.3+, lambdas e encerramentos. Então eu acho que isso significa que você não pode usar pecs em qualquer projeto baseado em PHP <5.3 (apenas FYI).

Além disso, pecs não é tão maduro quanto PHPUnit ou SimpleTest. No entanto, acho que os defensores do BDD na comunidade PHP devem apoiar o crescimento de ferramentas como pecs que incentivar "Especificação por exemplo" ou BDD sem a confusão causada por ter que ferramentas de teste uso legado xUnit.

Hoje em dia eu trabalho mais em Python do que PHP. No entanto, a próxima vez que eu pegar um projeto PHP, eu vou ser muito feliz se eu tiver uma amadurecer, a comunidade apoiou a ferramenta como pecs para elaborar as especificações para o software.

Eu tive uma experiência incrível com Behat / Mink http://behat.org

Concordo com os outros PHP como uma plataforma de teste de unidade não é um divertimento ou experiência BDD é o melhor caminho a percorrer se você estiver usando qualquer framework php

Embalagem minha cabeça em torno compositor como uma ferramenta de repo de construção foi o maior obstáculo, mas fomos capazes de usar Behat Mink selênio Webdriver jar servidor autônomo como uma ferramenta de projeto e testes de regressão incrível. Nós utilizado para executar a nossa suíte de regressão contra a nossa aplicação CakePHP em um servidor Jenkins, mas ele provou ser não muito "falhar rapidamente" o suficiente

Agora o nosso fluxo de trabalho é assim: Criar história em maxixe história refinar recurso de gravação e esboço sobre quaisquer novas defs passo começar a codificar solução php para teste Então, no final, temos um recurso ou correção de bug trabalhar com um teste bdd cobrindo-

Nós configurar uma VM Ubuntu com um trabalho Behat configuração e copiado para cada estação de trabalho. Nós cozido-lo em nosso processo. Nós apenas puxar para baixo as mudanças executar testes em seguida, começar a codificar o material novo.

Nós escrevemos um script shell para lixeiras MySQL são executados automaticamente e carregá-los antes de cada recurso que tornou refatoração de código de uma brisa.

A classe Mink WebAssert lhe dá todas as afirmações que você precisa comportamento Validar A sessão ordinária / aulas CommonContext são grandes para usar CSS ou XPath.

Eu tenho usado Capivara / WebDriver com Java e Rails projetos antes e encontrou a configuração sobrecarga / curva de aprendizagem é muito alto em comparação com Behat.

Além do bibliotecas / frameworks que Alan já mencionado, você pode fazer uso do do mod_perl Apache :: Teste, que eu o que eu uso como um cinto de segurança. Ele me permite de forma muito simples integrar testes no meu processo de liberação. Os usos arnês saída TAP (Teste Qualquer coisa Protocol) para determinar se ou não os testes passar ou falhar , usando bibliotecas como Test :: simples ou teste :: Mais ( Perl e < a href = "http://shiflett.org/code/test-more.php" rel = "nofollow noreferrer"> PHP ).

fora da caixa Apache :: Teste Suporta a gravação de testes, tanto em Perl e PHP. Em meus próprios projetos, demorou um pouco pouco de malandragem e um monte de lendo para realmente fazê-lo funcionar, mas uma implementação de Test :: Mais em PHP é built-in para o arnês. Correndo todos os testes escritos em PHP e Perl é feito através de um único comando e qualquer falha ao longo do caminho é capturado Apache :: Teste, notando o melhor possível o que deu errado.

A parte incrível de tudo isso é que você pode até utilizar PHPUnit, ou Simples-Test ao lado dos dois frameworks de testes anteriores. Ao executar testes em cada respectiva biblioteca, você pode usar a implementação PHP de Test :: More (ou até mesmo Perl, testando stdout) e volta cuspir TAP para o seu arnês de interpretar.

Certifique-se de ler a Apache :: teste documentação eo href="http://perl.apache.org/docs/general/testing/testing.html" rel="nofollow noreferrer"> guia . Além disso, eu encontrei o artigo aqui uma grande ajuda.

Como um exemplo rápido, você poderia configurar um teste em Perl em poucas linhas de código que será executado através de todas as páginas em seu site (que têm ligações) e verificar todos resultam em respostas dos 200 OK 'e não tem qualquer erro de análise:

#!perl

use strict;
use warnings;

use Apache::Test qw(:withtestmore);
use Apache::TestRequest;
use Test::More;
use Test::WWW::Mechanize;
use WWW::CheckSite::Validator;
use WWW::CheckSite::Spider;

plan 'no_plan';

my $config = Apache::Test::config();
my $host = "http://". Apache::TestRequest::hostport($config) || '';

my $s = WWW::CheckSite::Spider->new(
    uri => $host,
    ua_class => 'Test::WWW::Mechanize',
);
my $m = $s->current_agent;

while (my $page = $s->get_page) {
    is($m->status(), "200", $m->uri() ." retrieved successfully.");
    $m->content_lacks("Parse Error", $m->uri() ." does not contain syntax errors.");
}

Em um projeto passado, eu usei o PHPUnit, e isso me deixou querendo. PHPUnit + Comando linha correndo dos testes, fez com que muito tempo foi gasto de codificação os testes, não foi rápido o suficiente, e realmente parecia para restringir o estilo do código de uma maneira que eu não gostei (objetos eram mais fáceis de teste, por isso parecia meio favorecer objetos).

O selênio foi uma solução que falamos, mas nunca cheguei a entrar em jogo, e acho que seria realmente se beneficiaram com esse tipo de teste de nível de saída.

Nesta mais recente projeto, o principal programador tem tido uma abordagem de programação mais funcional como temos vindo a rever software. Quando eu mencionei que eu gostaria de código via TDD, ele instigou uma solução personalizada em um dia ou menos que eu considero ter sido tão eficaz para mim para usar como PHPUnit. Além disso, ele realmente abriu meus olhos sobre a questão de Object Oriented vs. programação funcional.

Primeiro projecto, iniciado a partir do zero, em no piso térreo, Object Oriented codificação, grande Unit Testing Framework, tornou-se monolítica e atolados rapidamente. Segundo projeto, software CMS bem estabelecido com uma história de 5 anos e código antigo, mas um paradigma de programação funcional e uma estrutura de teste simples (que na verdade muitas vezes fez uso de assert php) fez ficar mais simples em vez de crescer em complexidade.

O segundo projeto, também, nunca chegou ao ponto de implementar Selenium (e eu ainda acho que seria benéfico), mas a abordagem de programação funcional tornou mais fácil para lidar com testes in-código.

Eu encontrei esta questão e, enquanto eu ainda estou no "palco pesquisando" em descobrir o que está acontecendo. Acabei de descobrir algo para Ruby on Rails chamado de "pepino" http://cukes.info/

É essencialmente 'movida história do desenvolvimento' para Ruby e, possivelmente, um padrão de ouro no reino de testes funcionais, pelo menos tanto quanto eu vi em minhas viagens. (Eu coloquei isso lá em cima publicamente, por isso os especialistas podem me corrija se eu estiver errado)

Como um exemplo da língua em Pepino, você tem algo que se assemelha muito de perto SQL. MAS parece ser ainda mais legível. Do cukes primeira página a sua aparência de linguagem como esta:

 Scenario: Add two numbers
      Given I have entered 50 in the calculator
      And I have entered 70 in the calculator
      When I press add
      Then the result should be 120 on the screen

O código acima irá compilar e executar como um teste.

Agora que é tudo preâmbulo ao ponto de responder a sua pergunta sobre PHP -. BDD & TDD

Em ecoando os comentários acima, PHPUnit permitirá o teste de unidade e de acordo com este post: http://sebastian-bergmann.de/archives/738-Support-for-BDD-and-Stories-in-PHPUnit-3.3.html também suportes "estilo de história" testes BDD.

Para expandir a resposta acima com relação a "simpletest" mencionado acima, o sistema de ST foi construído em um objeto classe navegador para automação navegador, enquanto PHPUnit tem uma extensão para a automação navegador SELÊNIO http://seleniumhq.com (a vantagem de selênio vs. SimpleTest é que Selinium irá executar qualquer javascript na página, enquanto SimpleTest não).

Eu espero que você encontrar esta informação útil, pois é o resultado de um número de meses de pesquisa pessoal e hands-on de tentativa e erro com as tecnologias anteriores. Se há especialistas lá fora, que podem esclarecer e melhorar o meu entendimento do que precede, congratulo-me com o feedback.

  • Alex.

a comparação dos testes BDD de Michael Booth apresenta em ambas as línguas:

http://mechanicalrobotfish.com / posts / 117-ruby-vs-php-BDD-beauty-contest-no-contest

conclui que ferramentas e cultura PHP BDD é subdesenvolvido neste momento.

Certamente não há nada comparável com o que está disponível para um programador Ruby, quer em termos de conhecimento (livros, vídeos, artigos, posts) ou ferramentas (Rspec, Shoulda, Factory Girl, Mocha, pepino).

Você pode querer verificar para fora PHPStorm . Eu como os corredores de teste que uso PHPUnit de dentro do IDE.

Agora eu estou desenvolvendo quadro "Spectrum" para o teste BDD: https://github.com/m -haritonov / espectro

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top