SimpleTest vs PHPunit

127

Eu queria saber se alguém que tem experiência em ambas as coisas pode lançar alguma luz sobre a diferença significativa entre os dois, se houver?

Alguma força específica de cada uma que a torne adequada para qualquer caso específico?

paan
fonte
Eu iria para PHPUnit é muito melhor
João Baptista
9
... e porque? Tente explicar sua resposta, fornecer recursos / links / examples.o
Manuel
<snark> Por que não os dois? </snark> #
Agi Hammerthief 6/06/16

Respostas:

90

Essa pergunta é bastante antiga, mas como ainda está recebendo tráfego e respostas, embora eu tenha afirmado meu argumento aqui novamente, mesmo assim já o fiz em outras questões (mais recentes).

Estou realmente muito confuso que o SimpleTest ainda seja considerado uma alternativa ao phpunit. Talvez eu esteja mal informado, mas até onde eu vi:

  • PHPUnit é o padrão; a maioria dos frameworks o usa (como o Zend Framework (1 e 2), Cake, Agavi e até o Symfony está descartando seu próprio Framework no Symfony 2 para phpunit).
  • O PHPUnit está integrado em todos os IDE PHP (Eclipse, Netbeans, Zend Stuide, PHPStorm) e funciona bem.
  • O Simpletest possui uma extensão eclipse para PHP 5.1 (também conhecida como antiga) e nada mais.
  • O PHPUnit funciona bem com todos os servidores de integração contínua, pois gera todos os arquivos de log padrão para cobertura de código e relatórios de teste.
  • Mais simples não. Embora este não seja um grande problema para começar, ele será um grande problema quando você parar de "apenas testar" e começar a desenvolver software (Sim, essa afirmação é provocativa :) Não leve muito a sério).
  • O PHPUnit é mantido ativamente, estável e funciona muito bem para todas as bases de código, todos os cenários e todos os modos em que você deseja escrever seus testes.
  • O PHPUnit fornece relatórios de cobertura de código muito mais agradáveis do que o Simpletest
  • Com o PHPUnit, você também recebe esses relatórios dentro do seu IDE ( Netbeans , Eclipse, ...)
  • Também há algumas sugestões para a web interface to phpunit tests.

Ainda não vi nenhum argumento a favor do SimpleTest. Não é nem mais simples de instalar, pois o PHPUnit está disponível via pear:

pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

e o "primeiro teste" parece praticamente o mesmo.

Como PHPUnit 3.7é ainda mais fácil instalá- lo, basta usar oPHAR Archive

wget http://pear.phpunit.de/get/phpunit.phar
chmod +x phpunit-3.7.6.phar

ou para o Windows apenas baixando o phar e executando:

php phpunit-.phar

ou ao usar o compositor suportado, instale maneiras como

"require-dev": {
    "phpunit/phpunit": "3.7.*"
}

ao seu compositor.json.


Para tudo que você deseja testar, o PHPUnit terá uma solução e você poderá encontrar ajuda em praticamente qualquer lugar (SO, #phpunit canal irc no freenode, praticamente todos os desenvolvedores de php;))

Por favor, corrija-me se afirmei algo errado ou esqueci algo :)

Visão geral das ferramentas de teste do PHP

Vídeo: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

Slides: http://www.slideshare.net/sebastian_bergmann/the-php-testers-toolbox-osi-days-2011

Ele menciona coisas como Atoum, que se autodenomina: "Uma estrutura de teste de unidade simples, moderna e intuitiva para PHP!"


Transparência completa

Originalmente, escrevi essa resposta em janeiro de 2011, onde não tinha afiliação a nenhum projeto de teste de PHP. Desde então, me tornei um colaborador do PHPUnit.

edoriano
fonte
5
Eu descobri que o teste da web mais simples era muito mais fácil de configurar e executar do que o teste da web do phpunit. Como isso é praticamente uma necessidade do php, essa é uma vitória para projetos de pequeno a médio porte, onde você só deseja lançar uma estrutura de teste em um instante e o importante é o simples nível de teste. Por exemplo, excluindo testes na web, eu tendem a usar apenas o método assertTrue () no teste mais simples. Os testes na Web, é claro, ficam mais complicados, mas não precisam ser excessivamente.
Kzqai
1
"> Já que isso é praticamente uma necessidade do php" - eu discordo totalmente disso. Ainda estou para ver qualquer projeto php (ou framework) que executa seus testes através de um navegador. Isso cria muitos problemas sem nenhum benefício. Os tempos em que o código php foi desenvolvido em um sistema de hospedagem compartilhada usando a sincronização ftp estão obsoletos ( dedos cruzados ) e nenhum projeto, mesmo pequeno, requer um servidor web em execução (no máximo, o php é enviado de fábrica). UNIT Testar através de um navegador e não do CLI ou do IDE é apenas um caso de uso tão raro que acho que não importa.
Edorian 10/10/12
13
Um forte motivo para considerar o SimpleTest sobre o PHPUnit é que esta é uma ferramenta de linha de comando que deve ser instalada no servidor que executa os testes, que às vezes é muito mais difícil do que apenas includeos arquivos .PHP do SimpleTest (como outros explicaram). Para programadores profissionais que desenvolvem seu próprio ambiente de teste, o PHPUnit parece difícil de superar, mas se integrar um sistema de teste a um aplicativo de código aberto baseado em PHP, em que "desenvolvedores" para o aplicativo possam ser, na melhor das hipóteses (o que eu chamo) "programadores ocupacionais" , a simplicidade do SimpleTest tem um apelo real, para mim de qualquer maneira. FWIW.
MikeSchinkel 04/07
2
@MikeSchinkel Não concordo mais. Usamos o SimpleTest como uma solução integrada de teste baseada em navegador para nossa estrutura de aplicativos sob medida. Ele estava sempre disponível e não requeria nenhuma configuração de instalação além de um svn pull, pois foi incluído na fonte do framework. Mudamos para o PHPUnit para integração com o CIS. Por sermos uma loja do Windows, o PHPUnit pode ser um pesadelo para instalar e configurar, e muitos de nossos desenvolvedores juniores simplesmente quebram o ambiente ou perdem a vontade de testar.
Gavin
1
O link para os slides está quebrado.
Dmitri Zaitsev
35

Prefiro o PHPUnit agora, mas quando comecei, usei o SimpleTest, pois nem sempre tinha acesso à linha de comando. O SimpleTest é legal, mas a única coisa que realmente tem sobre o PHPUnit, na minha opinião, é o web runner.

As razões pelas quais eu gosto do PHPUnit são que ele se integra a outras ferramentas de desenvolvedor PHP, como phing (como o SimpleTest), phpUnderControl e Xinc . A partir da versão 3.0, ele possui suporte de simulação , está sendo desenvolvido ativamente e a documentação é excelente.

Realmente, a única maneira de responder a essa pergunta é experimentar as duas por um tempo e ver qual se encaixa melhor no seu estilo.

EDIT: Phing agora também se integra ao SimpleTest.

Eric Scrivner
fonte
4
Apenas uma observação, o site de phing diz que ele suporta o SimpleTest
philfreo
18
  • Eu não conseguia entender como baixar e instalar o PHPUnit.
  • No entanto, eu poderia entender facilmente como instalar o SimpleTest.

    (Tanto quanto me lembro, as instruções para o PHPUnit disseram algo como "instalá-lo via PEAR e não daremos nenhuma instrução sobre como fazê-lo de outra maneira"):

  • http://www.phpunit.de/manual/current/en/installation.html

Para o SimpleTest , faça o download e aponte para ele a partir do seu código.

Então, o Simpletest venceu por mim.

stfan
fonte
4
Suponho que a documentação tenha sido alterada desde que você postou sua resposta. Hoje, basta digitar 3 comandos e ele será instalado, você nem precisa baixar nada.
Anti Veeranna
5
Você pode instalar o PHPUnit via PEAR, baixá-lo manualmente ou obter o código mais recente do github. Há um link claro para as instruções de instalação na página inicial. SimpleTest só me dá uma opção, apontando para sourceforge e da miríade de comerciais ...
Potherca
1
No Windows, o PHPUnit é uma tarefa difícil de instalar. Eu tive que instalá-lo em 2 estações de trabalho. O primeiro levou 3 horas, com a ajuda do canal PEAR IRC. Para o segundo (mesmo sistema operacional), nunca consegui. Dito isto, no Linux é um charme.
precisa saber é o seguinte
1
SimpleTest +1 Fácil de instalar Fácil de usar. O PHPUnit é poderoso do que, no entanto, mais simples para satisfazer minhas necessidades.
Cheung
As coisas podem ter mudado desde 09, mas o PHPUnit foi instalado em segundos com apenas alguns comandos no Windows.
Cypher
13

Metade dos pontos mencionados na resposta aceita simplesmente não é verdadeira:

O SimpleTest possui

  • a configuração mais fácil (extrair para a pasta, incluir e executar)
  • basta verificar a pasta no controle de versão (tente fazer isso com o phpunit hoje em dia :))
  • menos dependências e muitas extensões (testador da web, testador de formulários, autenticação)
  • um bom repórter de cobertura de código, fácil de estender (pontos, nomes de funções, cores)
  • um resumo de cobertura de código (finalmente desembarcado no PHPUnit 4.x)
  • um web runner decente e um web runner ajax, com grupos e execuções de arquivo único
  • ferramenta diff ainda melhor (sem problemas de espaço em branco ou nova linha)
  • um adaptador / wrapper para executar o SimpleTests pelo phpUnit e vice-versa
  • compatibilidade PHP5.4 +

A desvantagem:

  • não é padrão da indústria (PHPUnit)
  • não é mantido ativamente
Jens A. Koch
fonte
1
Ainda é útil para mim e meu servidor php4 chefe ^^ "
javier_domenech
Obrigado. Atualizei a base de código do SimpleTest para trabalhar com versões mais recentes do PHP e mais alguns ajustes serão recebidos durante o ano. - PHP4 é EOL desde idades e não recebe nenhum patch de segurança. Eu não usaria mais em serviços externos. Você deve convencer o seu patrão para permitir uma atualização executar a pelo menos v5.5 ou melhor v5.6: php.net/supported-versions.php#php-5.6
Jens A. Koch
Conheço Jens, obrigado pelo conselho. Solução de teste muito boa sua
javier_domenech
1
=) Obrigado por me mostrar o repositório do Github. Eu comecei a me preocupar com o "bit não mantido". Apenas superficialmente, lembre-se, pois ele ainda faz tudo o que eu sempre quis de uma estrutura de teste de baixo barulho com o código moderno com o qual trabalho.
jeteon
O SimpleTest tem muito mais flexibilidade na configuração de suas suítes de teste, pois você pode fazer tudo isso em código php. Portanto, você tem uma linguagem de programação completa à sua disposição, não apenas os arquivos de configuração xml e os parâmetros do terminal. O PHPUnit pode ser mais suportado por ferramentas, mas diz mais sobre como a comunidade PHP continua optando por apoiar coisas inferiores.
still_dreaming_1
8

Eu achei o SimpleTest ainda mais fácil do que o PHPUnit de configurar. Basta extraí-lo e você está pronto para ir. Uma vantagem disso é se você estiver trabalhando em mais de uma máquina, pois é possível armazenar toda a estrutura de teste da mesma maneira que o seu código-fonte e, assim, saber que está usando o mesmo código da estrutura. Especialmente se você modificá-lo de alguma forma.

Então, eu diria que o ponto forte do SimpleTest é que ele é muito leve e portátil.

O SimpleTest também é fornecido com uma GUI HTML muito simples, que é bastante fácil de estender, se você desejar. Até onde eu sei, o PHPUnit não inclui uma GUI HTML, mas existem GUI: s disponíveis para download, como o Cool .

Erik Öjebo
fonte
Ah, cara, eu votei contra isso totalmente por acidente e nem percebi até o dia seguinte. Agora meu voto está bloqueado ... Desculpe.
still_dreaming_1
8

Bem, eu criei um executor de casos de teste de interface do usuário baseado em web phpUnit e o disponibilizei no sourceforge. Usa ajax e tem uma interface bem legal também, se você quiser testar, verifique no sourceforge. O nome do projeto é phpunitwebui e o site é http://phpunitwebui.sourceforge.net/


fonte
4

Como foi apontado, é principalmente uma opção de preferência, pois ambos executam os testes que você escreve e relatam os resultados.

A interface da web da Web mais simples é muito útil, mas às vezes também pode ficar complicada. No meu projeto atual, eu teria que colocar mais trabalho em um sistema para fazer meu aplicativo (uma API) funcionar com a interface da web (configurar o apache corretamente, copiar arquivos para a raiz public_html, etc.) do que seria simplesmente executar o phpunit no espaço de trabalho do eclipse. Portanto, eu escolho o PHPUnit. Além disso, o uso do PEAR foi uma grande vantagem, pois você não precisa rastrear manualmente as atualizações. Basta executar de pear upgradevez em quando e o PHPUnit será mantido atualizado.

T0xicCode
fonte
Eu não entendo essa análise. Você está dizendo que testa funcionalidade do tipo navegador por meio do plugin eclipse para phpunit, em vez de uma configuração local do apache?
Kzqai 10/10/12
Não, estou dizendo que no meu projeto, como não há funcionalidade do tipo navegador, estou usando o phpunit através do eclipse.
T0xicCode 01/07/2012
2

Isso é do ponto de vista de um desenvolvedor PHP muito casual:

Levei dois dias para entender o PHPUnit, principalmente tentando depurar no Eclipse que finalmente desisti.

Levei duas horas para configurar o Simpletest, incluindo a depuração no Eclipse.

Talvez eu encontre as falhas do Simpletest no futuro, mas até agora ele faz bem o que eu preciso: TestClasses, objetos Mock, depuração de código de teste e interface da Web para obter um instantâneo rápido da situação.

Novamente: Isso do ponto de vista de um usuário PHP muito casual (nem mesmo desenvolvedor :-)

tru7
fonte
1

Não checo o Simple Test há algum tempo, da última vez que ele teve um plug-in do eclipse, o que é um fator importante para mim, mas não é atualizado há muito tempo. Sebastian Bergmann ainda está trabalhando ativamente no PHPUnit, mas ainda não possui um bom plugin para eclipse - mas está incluído no novo Zend Studio.

FrankS
fonte
1

Essa pergunta é antiga, mas quero acrescentar minha experiência: o PHPUnit parece ser o padrão agora, mas se você trabalha com um sistema legado que usa muitas e muitas variáveis ​​globais, pode ficar preso desde o início. Parece que não há uma boa maneira de fazer testes com vars globais no PHPUnit, você parece ter que definir suas variáveis ​​via $ GLOBALS, o que não é bom se você tiver vários arquivos configurando variáveis ​​globais em todos os lugares. OK, alguns podem dizer que o problema está no sistema legado, mas isso não significa que não podemos fazer testes nesse sistema. Com o SimpleTest, isso é simples. Suponho que se o PHPUnit nos permite incluir um arquivo globalmente, não dentro de nenhum escopo de classe / função, isso também não seria um problema.

Outra solução promissora é http://www.enhance-php.com , parece legal :)

mr1031011
fonte
Eu sempre usei apenas <phpunit backupGlobals="false">no XML de configuração e nunca tive qualquer problema com globals em testes ...
Potherca
@ mr1031011 seu link não é útil em algum lugar. Talvez você quis dizer ?: github.com/Enhance-PHP/Enhance-PHP
user12345
@Potherca me dizer sobre isso - Inicialmente, eu tinha um monte de problemas com globals em um projeto de código legado, e eu acho que eu tentei todas as anotações @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState, global $xxxe todas as suas combinações, antes de tentar --no-globals-backupe de repente ver tudo trabalhando como esperado. : D
conny
-2

quando existem milhares de funções para testar de uma só vez, o phpunit está a caminho, o teste simples está aquém da sua base na Web.

Ainda estou usando a web simples para teste em pequena escala.

Mas ambos são bons

user5454174
fonte
O SimpleTest não é puramente baseado na Web. Eu usei exclusivamente a partir da linha de comando até agora.
jeteon