SimpleTest vs PHPunit


127

Mi chiedevo se qualcuno che ha esperienza in entrambe queste cose può far luce sulla differenza significativa tra i due, se presente?

Qualche forza specifica di ciascuno che lo rende adatto a qualsiasi caso specifico?


Preferirei PHPUnit è molto meglio
joao baptista,

9
... e perché? Prova a spiegare la tua risposta, fornire risorse / collegamenti / esempi
O

<snark> Perché non entrambi? </snark>
Agi Hammerthief il

Risposte:


90

Questa domanda è piuttosto datata, ma poiché sta ancora ottenendo traffico e risposte, anche se dichiaro di nuovo il mio punto qui, quindi l'ho già fatto su alcune altre (più recenti) domande.

Sono davvero sconcertato dal fatto che SimpleTest sia ancora considerato un'alternativa a phpunit. Forse sono solo male informato, ma per quanto ho visto:

  • PHPUnit è lo standard; la maggior parte dei framework lo usa (come Zend Framework (1 & 2), Cake, Agavi, anche Symfony sta rilasciando il proprio Framework in Symfony 2 per phpunit).
  • PHPUnit è integrato in ogni IDE PHP (Eclipse, Netbeans, Zend Stuide, PHPStorm) e funziona bene.
  • Simpletest ha un'estensione eclipse per PHP 5.1 (aka vecchio) e nient'altro.
  • PHPUnit funziona perfettamente con tutti i server di integrazione continua poiché genera tutti i file di registro standard per la copertura del codice e i rapporti di prova.
  • Il più semplice no. Anche se questo non è un grosso problema per cominciare, ti morderà alla grande una volta che smetti di "solo testare" e inizi a sviluppare software (Sì, questa affermazione è provocatoria :) Non prenderla troppo sul serio).
  • PHPUnit è attivamente mantenuto, stabile e funziona alla grande per ogni base di codice, ogni scenario e ogni modo in cui desideri scrivere i tuoi test.
  • (Soggettivo) PHPUnit fornisce rapporti di copertura del codice molto più piacevoli di quelli più semplici
  • Con PHPUnit ottieni anche questi rapporti all'interno del tuo IDE ( Netbeans , Eclipse, ...)
  • Inoltre ci sono un paio di suggerimenti per a web interface to phpunit tests.

Non ho ancora visto alcun argomento a favore di SimpleTest. Non è nemmeno più semplice da installare poiché PHPUnit è disponibile tramite pear:

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

e il "primo test" sembra più o meno lo stesso.

A partire da PHPUnit 3.7è ancora più facile installarlo semplicemente usando ilPHAR Archive

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

o per Windows basta scaricare Phar ed eseguire:

php phpunit-.phar

o quando si utilizza il compositore supportato installare modi come

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

al tuo compositore.json.


Per tutto quello che vuoi testare PHPUnit avrà una soluzione e sarai in grado di trovare aiuto praticamente ovunque (SO, #phpunit canale irc su freenode, praticamente ogni sviluppatore php;))

Per favore, correggimi se ho dichiarato qualcosa di sbagliato o ho dimenticato qualcosa :)

Panoramica degli strumenti di test PHP

Video: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

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

Menziona cose come Atoum che si autodefinisce: "Un framework di unit test semplice, moderno e intuitivo per PHP!"


Divulgazione completa

Ho originariamente scritto questa risposta nel gennaio 2011 in cui non avevo alcuna affiliazione con nessun progetto di test PHP. Da allora sono diventato un collaboratore di PHPUnit.


5
Ho scoperto che i test Web più semplici erano molto più facili da configurare e avviare rispetto ai test Web di phpunit. Dal momento che è praticamente una necessità con php, questa è una vittoria per progetti di piccole e medie dimensioni, in cui vuoi semplicemente lanciare in un framework di test in un istante e la cosa importante sono semplici livelli di test. Ad esempio, escludendo i test Web, tendo a utilizzare il metodo assertTrue () solo nel modo più semplice. I test Web, ovviamente, diventano più complicati, ma non devono esserlo eccessivamente.
Kzqai,

1
"> Dal momento che è praticamente una necessità con php" - Non sono assolutamente d'accordo su questo. Devo ancora vedere qualsiasi progetto php (o framework) che esegue i suoi test attraverso un browser. Crea molti problemi senza alcun beneficio reale. I tempi in cui il codice php è stato sviluppato su un sistema di hosting condiviso usando la sincronizzazione ftp sono morti e scomparsi ( dita incrociate ) e nessun progetto, anche piccolo, richiede un server web in esecuzione (al massimo quello che un php viene consegnato fuori dalla scatola). UNITÀ Testare attraverso un browser e non il cli o un IDE è solo un caso d'uso così raro che non penso che sia importante.
edorian,

13
Un valido motivo per considerare SimpleTest su PHPUnit è che quest'ultimo è uno strumento da riga di comando che deve essere installato sul server che esegue i test, che a volte è molto più difficile del semplice includeinging dei file .PHP di SimpleTest (come altri hanno spiegato.) Per i programmatori professionisti che creano il proprio ambiente di test PHPUnit sembra difficile da battere, ma se si integra un sistema di test in un'app open source basata su PHP in cui "sviluppatori" per l'app potrebbero essere nella migliore delle ipotesi (ciò che chiamo) "programmatori occupazionali", allora la semplicità di SimpleTest ha comunque un fascino reale per me. FWIW.
MikeSchinkel,

2
@MikeSchinkel Non potrei essere più d'accordo. Abbiamo utilizzato SimpleTest come soluzione di test integrata basata su browser per il nostro framework di applicazioni su misura. Era sempre disponibile e non richiedeva alcuna configurazione di installazione oltre a un svn pull poiché era incluso nel sorgente del framework. Siamo passati a PHPUnit per l'integrazione CIS. Poiché siamo un negozio di Windows, PHPUnit può essere un incubo da installare e configurare e molti dei nostri sviluppatori junior semplicemente rompono l'ambiente o perdono la volontà di testare.
Gavin

1
Il collegamento alle diapositive è interrotto.
Dmitri Zaitsev,

35

Preferisco PHPUnit ora, ma quando ho iniziato ho usato SimpleTest in quanto non avevo sempre accesso alla riga di comando. SimpleTest è carino, ma l'unica cosa che ha davvero su PHPUnit, secondo me, è il web runner.

Le ragioni per cui mi piace PHPUnit sono che si integra con altri strumenti di sviluppo PHP come phing (come fa SimpleTest), phpUnderControl e Xinc . A partire dalla versione 3.0 ha un supporto beffardo , viene attivamente sviluppato e la documentazione è eccellente.

L'unico modo per rispondere a questa domanda è provare entrambi per un po 'e vedere quale si adatta meglio al tuo stile.

EDIT: Phing ora si integra anche con SimpleTest.


4
Solo una nota, il sito Web di phing afferma che supporta SimpleTest
philfreo

18
  • NON sono riuscito a capire come scaricare e installare PHPUnit.
  • Tuttavia, potrei facilmente capire come installare SimpleTest.

    (Per quanto posso ricordare le istruzioni per PHPUnit hanno detto qualcosa sulla falsariga di "installarlo tramite PEAR e non daremo alcuna istruzione su come farlo in altro modo") vedere:

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

Per SimpleTest , basta scaricarlo e puntarlo dal tuo codice.

Quindi il più semplice ha vinto per me.


4
Suppongo che la documentazione sia cambiata da quando hai pubblicato la tua risposta. Oggi basta digitare 3 comandi e verrà installato, non è necessario scaricare nulla da soli.
Anti Veeranna,

5
Puoi installare PHPUnit tramite PEAR, scaricarlo manualmente o estrarre il codice più recente da github. C'è un chiaro link alle istruzioni di installazione sulla homepage. SimpleTest mi dà solo un'opzione, indicando sourceforge ed è una miriade di spot pubblicitari ...
Potherca,

1
Sotto Windows, PHPUnit è difficile da installare. Ho dovuto installarlo su 2 workstation. Il primo è durato 3 ore, con l'aiuto del canale IRC PEAR. Per il secondo (stesso SO) non ci sono mai riuscito. Detto questo, su Linux è un incanto.
FMaz008,

1
SimpleTest +1 Facile da installare Facile da usare. PHPUnit è più potente di, tuttavia, il più semplice per soddisfare le mie esigenze.
Cheung,

Le cose potrebbero essere cambiate dal '09, ma PHPUnit si è installato in pochi secondi con pochi comandi su Windows.
Cypher


13

La metà dei punti citati nella risposta accettata semplicemente non è vera:

SimpleTest ha

  • la configurazione più semplice (estrarre nella cartella, includere ed eseguire)
  • controlla semplicemente la cartella nel controllo versione (prova a farlo con phpunit al giorno d'oggi :))
  • meno dipendenze e molte estensioni (webtester, formtester, auth)
  • un buon reporter di copertura del codice, che è facile da estendere (punti, nomi delle funzioni, colori)
  • un riepilogo della copertura del codice (finalmente sbarcato in PHPUnit 4.x)
  • un web runner decente e un web runner ajax, con gruppi ed esecuzioni di singoli file
  • strumento diff ancora migliore (senza spazi bianchi o problemi di newline)
  • un adattatore / wrapper per eseguire SimpleTest da phpUnit e viceversa
  • compatibilità PHP5.4 +

Il rovescio della medaglia:

  • non standard industriale (PHPUnit)
  • non attivamente mantenuto

1
Ancora utile per me e il mio capo server php4 ^^ "
javier_domenech

Grazie. Ho aggiornato la base di codici di SimpleTest per funzionare con le nuove versioni di PHP e nel corso dell'anno verranno apportate altre modifiche. - PHP4 è EOL da secoli e non riceve alcuna patch di sicurezza. Non lo userei più su servizi esterni. Dovresti convincere il tuo capo a consentire l'esecuzione di un aggiornamento almeno alla v5.5 o migliore v5.6: php.net/supported-versions.php#php-5.6
Jens A. Koch,

Conosco Jens, grazie per il consiglio. Ottima soluzione di test tua
javier_domenech,

1
=) Grazie per avermi mostrato il repository Github. Avevo iniziato a preoccuparmi del "bit non mantenuto". Solo superficialmente, intendiamoci, dal momento che fa ancora tutto ciò che ho sempre desiderato da un framework di test a basso rischio con il codice moderno con cui lavoro.
Jeteon,

SimpleTest ha molta più flessibilità nel modo in cui configura le tue suite di test in quanto puoi fare tutto con il codice php. Quindi hai un linguaggio di programmazione completo a tua disposizione, non solo file di configurazione XML e parametri terminali. PHPUnit può essere più supportato da strumenti, ma dice di più su come la comunità PHP continua a scegliere di sostenere cose di qualità inferiore.
still_dreaming_1

8

Ho scoperto che SimpleTest era persino più facile da configurare di PHPUnit. Basta estrarlo e sei a posto. Un vantaggio di questo è se stai lavorando su più di una macchina, poiché puoi archiviare l'intero framework di test allo stesso modo del tuo codice sorgente, e quindi sapere che stai utilizzando lo stesso codice framework. Soprattutto se lo modifichi in alcun modo.

Quindi, direi che un punto di forza di SimpleTest è che è molto leggero e portatile.

SimpleTest viene inoltre fornito con una GUI HTML molto semplice, che è abbastanza facile da estendere se lo si desidera. Per quanto ne so, PHPUnit non include una GUI HTML, ma ci sono GUI disponibili per il download, come Cool .


Ah, amico, l'ho votato per sbaglio e non me ne sono reso conto fino al giorno successivo. Ora il mio voto è bloccato ... Mi dispiace.
still_dreaming_1,

8

Bene, ho creato un runner per test case dell'interfaccia utente basato su web phpUnit e l'ho reso disponibile su sourceforge. Utilizza ajax e ha un'interfaccia abbastanza interessante anche se vuoi provarlo, controlla su sourceforge. Il nome del progetto è phpunitwebui e il sito Web è http://phpunitwebui.sourceforge.net/


4

Come è stato sottolineato, è principalmente una scelta di preferenza, poiché entrambi eseguiranno i test scritti per esso e riporteranno i risultati.

L'interfaccia utente Web più semplice è molto utile, ma a volte può anche risultare ingombrante. Nel mio progetto attuale, avrei dovuto mettere più lavoro in un sistema per far funzionare la mia applicazione (un'API) con l'interfaccia web (impostare correttamente Apache, copiare i file nella radice public_html, ecc.) Di quanto sarebbe stato per eseguire semplicemente phpunit dallo spazio di lavoro di eclipse. Pertanto ho scelto PHPUnit. Inoltre, l'uso di PEAR è stato un grande vantaggio poiché non è necessario tenere traccia manualmente degli aggiornamenti. Esegui semplicemente pear upgradeuna volta ogni tanto e PHPUnit sarà tenuto aggiornato.


Non ho questa analisi. Stai dicendo di testare la funzionalità di tipo browser tramite il plug-in eclipse per phpunit, invece di una configurazione apache locale?
Kzqai,

No, sto dicendo che nel mio progetto, poiché non esiste alcuna funzionalità di tipo browser, sto usando phpunit tramite eclipse.
T0xic

2

Questo è dal punto di vista di uno sviluppatore PHP molto occasionale:

Mi ci sono voluti due giorni per afferrare PHPUnit, per lo più cercando di eseguire il debug sotto Eclipse a cui alla fine ho rinunciato.

Mi ci sono volute due ore per installare Simpletest, incluso il debug sotto Eclipse.

Forse troverò le carenze di Simpletest in futuro, ma finora fa bene quello di cui ho bisogno: TestClass, oggetti Mock, debug di test-code e interfaccia web per una rapida istantanea della situazione.

Ancora una volta: questo dal punto di vista di un utente PHP molto casual (nemmeno sviluppatore :-)


1

Non ho controllato Simple Test per un po ', l'ultima volta aveva un plugin eclipse, che è un fattore importante per me, ma non è stato aggiornato da molto tempo. Sebastian Bergmann sta ancora lavorando attivamente su PHPUnit, ma manca ancora un buon plugin per eclipse - ma è incluso per il nuovo Zend Studio.


1

Questa domanda è vecchia, ma voglio aggiungere la mia esperienza: PHPUnit sembra essere lo standard ora, ma se lavori con un sistema legacy che utilizza molte variabili globali, potresti rimanere bloccato fin dall'inizio. Sembra che non ci sia un buon modo per fare test con varianti globali in PHPUnit, sembra che tu debba impostare le tue variabili tramite $ GLOBALS che NON È BUONO se hai tonnellate di file che impostano variabili globali ovunque. OK alcuni potrebbero dire che il problema è nel sistema legacy, ma ciò non significa che non possiamo fare test su tale sistema. Con SimpleTest tale cosa è semplice. Suppongo che se PHPUnit ci consente di includere un file a livello globale, non all'interno di alcun ambito di classe / funzione, non si tratterebbe troppo di un problema.

Un'altra soluzione promettente è http://www.enhance-php.com , sembra carina :)


Ho sempre usato <phpunit backupGlobals="false">l'XML di configurazione e non ho mai avuto problemi con i globali nei test ...
Potherca,

@ mr1031011 il tuo link non va da qualche parte utile. Forse intendevi ?: github.com/Enhance-PHP/Enhance-PHP
user12345

@Potherca me ne parla - inizialmente ho avuto molti problemi con i globali in un progetto di codice legacy e penso di aver provato tutte le annotazioni @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState global $xxxe tutte le sue combinazioni, prima di provare --no-globals-backupe vedere improvvisamente tutto funziona come previsto. : D
conny,

-2

quando ci sono migliaia di funzioni da testare in una sola volta, phpunit è la strada da percorrere, un semplice test sta fallendo in quanto basato sul web.

Sto ancora usando il web semplice per test su piccola scala.

Ma entrambi sono buoni


SimpleTest non è puramente basato sul web. L'ho usato esclusivamente dalla riga di comando fino ad ora.
Jeteon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.