SimpleTest vs PHPunit

127

Me preguntaba si alguien que tenga experiencia en estas dos cosas puede arrojar algo de luz sobre la diferencia significativa entre los dos, en su caso.

¿Alguna fortaleza específica de cada uno que lo haga adecuado para cualquier caso específico?

paan
fuente
Iría por PHPUnit, es mucho mejor
joao baptista
9
... ¿y por qué? Trate de explicar su respuesta, proporcione recursos / enlaces / ejemplos
Manuel
<snark> ¿Por qué no ambos? </snark>
Agi Hammerthief

Respuestas:

90

Esta pregunta está bastante anticuada, pero como todavía está recibiendo tráfico y respuestas, aunque declaro mi punto aquí nuevamente, así que ya lo hice en otras preguntas (más nuevas).

Estoy realmente desconcertado de que SimpleTest todavía se considere una alternativa a phpunit. Tal vez solo estoy mal informado, pero por lo que he visto:

  • PHPUnit es el estándar; la mayoría de los frameworks lo usan (como Zend Framework (1 y 2), Cake, Agavi, incluso Symfony está lanzando su propio Framework en Symfony 2 para phpunit).
  • PHPUnit está integrado en cada IDE de PHP (Eclipse, Netbeans, Zend Stuide, PHPStorm) y funciona muy bien.
  • Simpletest tiene una extensión de eclipse para PHP 5.1 (también conocido como antiguo) y nada más.
  • PHPUnit funciona bien con todos los servidores de integración continua, ya que genera todos los archivos de registro estándar para cobertura de código e informes de prueba.
  • Más simple no. Si bien este no es un gran problema para comenzar, lo morderá a lo grande una vez que deje de "simplemente probar" y comience a desarrollar software (Sí, esa declaración es provocativa :) No lo tome demasiado en serio).
  • PHPUnit se mantiene activamente, es estable y funciona muy bien para cada base de código, cada escenario y cada forma en que desee escribir sus pruebas.
  • (Subjetivo) PHPUnit proporciona informes de cobertura de código mucho mejores que Simpletest
  • Con PHPUnit también obtiene estos informes dentro de su IDE ( Netbeans , Eclipse, ...)
  • También hay un par de sugerencias para a web interface to phpunit tests.

Todavía no he visto ningún argumento a favor de SimpleTest. Ni siquiera es más sencillo de instalar ya que PHPUnit está disponible a través de pear:

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

y la "primera prueba" se ve más o menos igual.

A partir de PHPUnit 3.7esto, es aún más fácil instalarlo simplemente usando elPHAR Archive

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

o para Windows simplemente descargando el phar y ejecutándolo:

php phpunit-.phar

o al usar el compositor compatible instalar formas como

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

a tu compositor.json.


Para todo lo que desee probar, PHPUnit tendrá una solución y podrá encontrar ayuda prácticamente en cualquier lugar (SO, #phpunit irc channel en freenode, casi todos los desarrolladores de php;))

Por favor corrígeme si he dicho algo mal u olvidado algo :)

Descripción general de las herramientas de prueba de PHP

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

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

Menciona cosas como Atoum que se autodenomina: "¡Un marco de prueba de unidad simple, moderno e intuitivo para PHP!"


La divulgación completa

Originalmente escribí esta respuesta en enero de 2011, donde no tenía afiliación con ningún proyecto de PHP Testing. Desde entonces me convertí en colaborador de PHPUnit.

edoriano
fuente
55
He descubierto que las pruebas web más simples eran mucho más fáciles de configurar y ejecutar que las pruebas web de phpunit. Dado que eso es prácticamente una necesidad con php, esta es una victoria para proyectos pequeños a medianos, donde solo desea incluir un marco de prueba en un instante y lo importante son los niveles simples de pruebas. Por ejemplo, excluyendo las pruebas web, tiendo a usar solo el método afirmativo () de la manera más simple. Las pruebas web, por supuesto, se vuelven más complicadas, pero no tienen que ser excesivamente.
Kzqai
1
"> Dado que eso es prácticamente una necesidad con php", estoy totalmente en desacuerdo con esto. Todavía no he visto ningún proyecto php (o marco) que ejecute sus pruebas a través de un navegador. Crea muchos problemas sin beneficio alguno. Los tiempos en los que el código php se desarrolló en un sistema de alojamiento compartido que utiliza la sincronización ftp están muertos y desaparecidos (con los dedos cruzados ) y ningún proyecto, ni siquiera pequeño, requiere un servidor web en ejecución (como máximo, el php se envía de fábrica). UNIT Pruebas a través de un navegador y no el cli o un IDE es un caso de uso tan raro que no creo que importe en absoluto.
Edorian
13
Una razón importante para considerar SimpleTest sobre PHPUnit es que esta última es una herramienta de línea de comandos que debe instalarse en el servidor que ejecuta las pruebas, lo que a veces es mucho más difícil que simplemente includeusar los archivos SimpleTest .PHP (como han explicado otros). para los programadores profesionales construir a cabo su propio entorno de pruebas PHPUnit suena difícil de superar, pero si la integración de un sistema de prueba en una aplicación de código abierto basado en PHP donde "promotores" de la aplicación pueden ser, en el mejor (lo que llamo) "programadores ocupacionales" a continuación, la simplicidad de SimpleTest tiene un atractivo real, para mí de todos modos. FWIW
MikeSchinkel
2
@ MikeSchinkel No podría estar más de acuerdo. Utilizamos SimpleTest como una solución de prueba integrada basada en navegador para nuestro marco de aplicación a medida. Siempre estuvo disponible y no requirió ninguna configuración de instalación más allá de un svn pull ya que se incluyó en la fuente del marco. Nos mudamos a PHPUnit para la integración de CIS. Debido a que somos una tienda de Windows, PHPUnit puede ser una pesadilla para instalar y configurar, y muchos de nuestros desarrolladores junior simplemente rompen el entorno o pierden la voluntad de probar.
Gavin
1
El enlace a las diapositivas está roto.
Dmitri Zaitsev
35

Prefiero PHPUnit ahora, pero cuando comencé usé SimpleTest ya que no siempre tenía acceso a la línea de comando. SimpleTest es bueno, pero lo único que realmente tiene sobre PHPUnit, en mi opinión, es el corredor web.

Las razones por las que me gusta PHPUnit son que se integra con otras herramientas de desarrollo de PHP, como phing (como lo hace SimpleTest), phpUnderControl y Xinc . A partir de la versión 3.0, tiene soporte de burla , se está desarrollando activamente y la documentación es excelente.

Realmente, la única forma de responder a esta pregunta es probar ambos por un tiempo y ver cuál se adapta mejor a su estilo.

EDITAR: Phing ahora también se integra con SimpleTest.

Eric Scrivner
fuente
44
Solo una nota, el sitio web de phing dice que es compatible con SimpleTest
philfreo
18
  • NO pude entender cómo descargar e instalar PHPUnit.
  • Sin embargo, podría entender fácilmente cómo instalar SimpleTest.

    (Hasta donde puedo recordar, las instrucciones para PHPUnit dijeron algo como "instalarlo a través de PEAR y no daremos ninguna instrucción sobre cómo hacerlo de otra manera") vea:

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

Para SimpleTest , simplemente descárguelo y apúntelo desde su código.

Tan simple ganó para mí.

stfan
fuente
44
Supongo que la documentación ha cambiado desde que publicaste tu respuesta en ese momento. Hoy, solo escribe 3 comandos y se instalará, ni siquiera tiene que descargar nada usted mismo.
Anti Veeranna
55
Puede instalar PHPUnit a través de PEAR, descargarlo manualmente o extraer el último código de github. Hay un enlace claro a las instrucciones de instalación en la página de inicio. SimpleTest solo me da una opción, apuntando a sourceforge y es una gran cantidad de comerciales ...
Potherca
1
En Windows, PHPUnit es difícil de instalar. Tuve que instalarlo en 2 estaciones de trabajo. El primero tomó 3 horas, con la ayuda del canal PEAR IRC. Para el segundo (mismo sistema operativo) nunca tuve éxito. Dicho esto, en Linux es un encanto.
FMaz008
1
SimpleTest +1 Fácil de instalar Fácil de usar. PHPUnit es poderoso, sin embargo, el más simple para satisfacer mis necesidades.
Cheung
Las cosas pueden haber cambiado desde '09, pero PHPUnit se instaló en segundos con solo unos pocos comandos en Windows.
Cypher
13

La mitad de los puntos mencionados en la respuesta aceptada simplemente no son ciertos:

SimpleTest tiene

  • la configuración más fácil (extraer a carpeta, incluir y ejecutar)
  • simplemente verifique la carpeta en el control de versiones (intente hacerlo con phpunit hoy en día :))
  • menos dependencias y muchas extensiones (webtester, formtester, auth)
  • Un buen reportero de cobertura de código, que es fácil de extender (puntos, nombres de funciones, colores)
  • un resumen de cobertura de código (finalmente aterrizó en PHPUnit 4.x)
  • un corredor web decente y un corredor web ajax, con grupos y ejecuciones de un solo archivo
  • herramienta de diferencia aún mejor (sin espacios en blanco o problemas de nueva línea)
  • un adaptador / envoltorio para ejecutar SimpleTests por phpUnit y viceversa
  • compatibilidad PHP5.4 +

La baja:

  • no estándar de la industria (PHPUnit)
  • no mantenido activamente
Jens A. Koch
fuente
1
Todavía útil para mí y para mi jefe servidor php4 ^^ "
javier_domenech
Gracias. He actualizado la base de código de SimpleTest para que funcione con las versiones más nuevas de PHP y hay algunos ajustes más durante el año. - PHP4 es EOL desde hace siglos y no recibe parches de seguridad. Ya no lo usaría en servicios externos. Debe convencer a su jefe para que permita que se ejecute una actualización de al menos v5.5 o mejor v5.6: php.net/supported-versions.php#php-5.6
Jens A. Koch
Lo sé Jens, gracias por el consejo. Muy agradable para prueba de la suya
javier_domenech
1
=) Gracias por mostrarme el repositorio de Github. Empecé a preocuparme por el "bit no mantenido". Solo superficialmente, ten en cuenta, ya que todavía hace todo lo que siempre quise de un marco de prueba de bajo alboroto con el código moderno con el que trabajo.
jeteon
SimpleTest tiene mucha más flexibilidad en la forma en que configura sus suites de prueba, ya que puede hacerlo todo en código php. Entonces tiene un lenguaje de programación completo a su disposición, no solo archivos de configuración xml y parámetros de terminal. PHPUnit puede ser más compatible con las herramientas, pero dice más acerca de cómo la comunidad PHP sigue eligiendo respaldar cosas inferiores.
still_dreaming_1
8

Encontré que SimpleTest era incluso más fácil de configurar que PHPUnit. Simplemente extráigalo y listo. Una ventaja de esto es si está trabajando en más de una máquina, ya que puede almacenar todo el marco de prueba de la misma manera que su código fuente y, por lo tanto, saber que está usando el mismo código de marco. Especialmente si lo modifica de alguna manera.

Entonces, diría que una ventaja de SimpleTest es que es muy ligero y portátil.

SimpleTest también se entrega con una GUI HTML muy simple, que es bastante fácil de ampliar si lo desea. Hasta donde yo sé, PHPUnit no incluye una GUI HTML, pero hay GUI disponibles para descargar, como Cool .

Erik Öjebo
fuente
Ah, hombre, lo rechacé totalmente por accidente y ni siquiera me di cuenta hasta el día siguiente. Ahora mi voto está bloqueado ... Lo siento.
still_dreaming_1
8

Bueno, hice un corredor de caso de prueba de interfaz de usuario basado en web phpUnit y lo hice disponible en sourceforge. Utiliza ajax y también tiene una interfaz bastante buena si quieres darle una oportunidad, compruébalo en sourceforge. El nombre del proyecto es phpunitwebui y el sitio web es http://phpunitwebui.sourceforge.net/


fuente
4

Como se ha señalado, es principalmente una opción de preferencia, ya que ambos ejecutarán las pruebas que usted escriba para ello e informarán los resultados.

La interfaz de usuario web más simple es muy útil, pero a veces también puede ser engorrosa. En mi proyecto actual, habría tenido que poner más trabajo en un sistema para hacer que mi aplicación (una API) funcione con la interfaz web (configurar apache correctamente, copiar archivos a la raíz public_html, etc.) de lo que hubiera sido simplemente ejecutar phpunit desde el espacio de trabajo de eclipse. Por lo tanto, elijo PHPUnit. Además, el uso de PEAR fue una gran ventaja, ya que no es necesario realizar un seguimiento manual de las actualizaciones. Simplemente ejecute de pear upgradevez en cuando y PHPUnit se mantendrá actualizado.

T0xicCode
fuente
No entiendo este análisis. ¿Está diciendo que prueba la funcionalidad de tipo navegador a través del complemento eclipse para phpunit, en lugar de una configuración local de apache?
Kzqai
No, digo que en mi proyecto, como no hay funcionalidad de tipo navegador, estoy usando phpunit a través de eclipse.
T0xicCode
2

Esto es desde el punto de vista de un desarrollador PHP muy informal:

Me tomó dos días comprender PHPUnit, principalmente tratando de depurar bajo Eclipse que finalmente renuncié.

Me llevó dos horas configurar Simpletest, incluida la depuración en Eclipse.

Tal vez encuentre las deficiencias de Simpletest en el futuro, pero hasta ahora hace lo que necesito: TestClasses, objetos simulados, depuración de código de prueba e interfaz web para una instantánea rápida de la situación.

De nuevo: esto desde el punto de vista de un usuario PHP muy informal (ni siquiera desarrollador :-)

tru7
fuente
1

No he verificado la Prueba simple durante un tiempo, la última vez que tenía un complemento de eclipse, que es un factor importante para mí, pero no se ha actualizado durante mucho tiempo. Sebastian Bergmann todavía está trabajando muy activamente en PHPUnit, pero aún carece de un buen complemento para eclipse, pero está incluido para el nuevo Zend Studio.

FrankS
fuente
1

Esta pregunta es antigua, pero quiero agregar mi experiencia: PHPUnit parece ser el estándar ahora, pero si trabaja con un sistema heredado que utiliza muchas variables globales, puede quedarse atascado desde el principio. Parece que no hay una buena manera de hacer pruebas con variables globales en PHPUnit, parece que tiene que configurar sus variables a través de $ GLOBALS, lo cual NO ES BUENO si tiene toneladas de archivos configurando variables globales en todas partes. Bien, algunos pueden decir que el problema está en el sistema heredado, pero eso no significa que no podamos hacer pruebas en dicho sistema. Con SimpleTest tal cosa es simple. Supongo que si PHPUnit nos permite incluir un archivo globalmente, no dentro de ningún alcance de clase / función, entonces tampoco sería un gran problema.

Otra solución prometedora es http://www.enhance-php.com , se ve bien :)

mr1031011
fuente
Siempre he usado <phpunit backupGlobals="false">en la configuración XML y nunca tuve problemas con los globales en las pruebas ...
Potherca
@ mr1031011 su enlace no va a algún lugar útil. ¿Quizás quiso decir ?: github.com/Enhance-PHP/Enhance-PHP
user12345
@Potherca me cuenta al respecto: inicialmente tuve muchos problemas con los globales en un proyecto de código heredado, y creo que probé todas las anotaciones @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState global $xxxy todas sus combinaciones, antes de intentar --no-globals-backupy de repente ver todo trabajando como se esperaba. : D
conny
-2

cuando hay miles de funciones para probar de una vez, phpunit es el camino a seguir, la prueba simple se queda corta ya que se basa en la web.

Todavía estoy usando web simple para pruebas a pequeña escala.

Pero ambos son buenos

usuario5454174
fuente
SimpleTest no está basado únicamente en la web. Lo he usado exclusivamente desde la línea de comandos hasta ahora.
jeteon