versión PHP | versión atómica |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X (actual) |
Al igual que SimpleTest o PHPUnit, atoum es un marco de prueba unitario específico para el lenguaje PHP. Sin embargo, ha sido diseñado desde el principio con las siguientes ideas en mente:
Se puede implementar rápidamente ,
Simplifique el desarrollo de pruebas,
Permita escribir pruebas unitarias confiables, legibles y claras .
Para lograrlo, utiliza masivamente las capacidades proporcionadas por PHP , para brindarle al desarrollador una forma completamente nueva de escribir pruebas unitarias. Por lo tanto, se puede instalar e integrar en un proyecto existente con extrema facilidad, ya que se trata de un único archivo PHAR , que es el único punto de entrada para el desarrollador. Además, gracias a su interfaz fluida , permite escribir pruebas unitarias de una manera cercana al lenguaje natural. También facilita la implementación de stubing dentro de las pruebas, gracias al uso inteligente de funciones y cierres anónimos . atomum de forma nativa y de forma predeterminada realiza la ejecución de cada prueba unitaria dentro de un proceso PHP separado, para garantizar el aislamiento . Por supuesto, se puede utilizar sin problemas para una integración continua y, dado su diseño, se puede adaptar a necesidades específicas con extrema facilidad. atoum también logra todo esto sin afectar el rendimiento, ya que ha sido desarrollado para presumir de una huella de memoria reducida y al mismo tiempo permitir una ejecución de prueba acelerada. También puede generar informes de ejecución de pruebas unitarias en formato Xunit, lo que lo hace compatible con herramientas de integración continua como Jenkins. atoum también genera informes de cobertura de código, para permitir supervisar las pruebas unitarias. Finalmente, aunque está desarrollado principalmente en UNIX, también puede funcionar en Windows.
atoum es realmente fácil de instalar: clonarlo desde github, descargar su PHAR o simplemente usar el compositor,
atoum proporciona un alto nivel de seguridad durante la ejecución de la prueba al aislar cada método de prueba en su propio proceso PHP. Por supuesto, esta función está disponible de fábrica, no es necesario instalar ninguna extensión adicional.
atoum ejecuta pruebas en un entorno paralelo haciendo que la suite se ejecute lo más rápido posible aprovechando las CPU multinúcleo actuales,
atoum proporciona un conjunto completo de afirmaciones naturales y expresivas que hacen que las pruebas sean lo más legibles posible. Aquí hay un ejemplo:
<?php$este->entero(150) ->esmayorque(100) ->esinferiorqueoriguala(200) ;
atoum admite una sintaxis similar a BDD con muchas palabras clave estructurales:
<?php$this->dado($testedInstance = nueva clase probada()) ->y($testedClass[] = $firstValue = uniqid()) ->entonces->tamañode($testedInstance)->isEqualTo(1) ->cadena($testedClass[0])->isEqualTo($firstValue) ;
atomum proporciona un motor simulado muy simple, pero muy potente:
<?php$this->dado($testedInstance = nueva clase probada()) ->and($aMock = new mockfoobar()) // aquí se crea dinámicamente un simulacro de la clase foobar->and($this->calling($aMock)->doOtherThing = true) // cada llamada a doOtherThing( ) por la instancia devolverá true->and($testedInstance->setDependency($aMock)) ->entonces->boolean($testedInstance->doSomething())->isTrue() ->mock($aMock) ->call('doOtherThing')->withArguments($testedInstance)->once() // Afirma que el método doOtherThing() de $aMock fue llamado una vez;
atomum proporciona una API clara para afirmar excepciones:
<?php$this->dado($testedInstance = nueva clase probada()) ->and($aMock = new mockfoobar()) // aquí se crea dinámicamente un simulacro de la clase foobar->and($this->calling($aMock)->doOtherThing->throw = $excepción = nueva excepción( )) // La llamada a doOtherThing() generará una excepción->and($testedInstance->setDependency($aMock)) ->entonces->excepción(función() uso ($testedInstance) { $testedInstance->doSomething(); }) ->isIdenticalTo($excepción) ;
atomum también te permite simular funciones nativas de PHP. Nuevamente, esto está disponible listo para usar:
<?php$this->dado($this->función->session_start = false) ->y($sesión = nueva clase probada()) ->entonces->excepción(función () uso ($sesión) { $sesión->inicio(); }) ->isInstanceOf('excepción del espacio de nombres del proyecto') ->hasMessage('No se puede iniciar la sesión') ->función('inicio_sesión')->fueLlamado()->una vez() ;
atoum es capaz de producir varios informes como TAP, clover, xUnit para integrarlos fácilmente con Jenkins o cualquier otra herramienta de integración continua.
atomum admite proveedores de datos,
Las pruebas de Atoum admiten la ejecución automática: simplemente incluya el corredor de Atoum y ejecute su prueba usando php path/to/test/file.php
,
El archivo de configuración de atoum está escrito exclusivamente en PHP (sin XML, YAML ni ningún otro formato), lo que le brinda la mejor flexibilidad:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = new atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/clases'); ->setTestedClassNamespace('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$corredor->setTestGenerator($testGenerator);
atoum proporciona un generador automático de plantillas de prueba,
atoum proporciona un modo de bucle para reactivar fácilmente las pruebas fallidas,
Atomum está lleno de otras características interesantes que irás descubriendo con el tiempo.
atomum requiere absolutamente PHP >= 5.6.0
o posterior para funcionar. En UNIX, para comprobar si tiene la versión PHP correcta, sólo necesita ejecutar el siguiente comando en su terminal:
$php-v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
Si se muestra PHP 5.6.x
o equivalente, entonces tiene instalada la versión de PHP correcta. Si desea utilizar atoum usando su archivo PHAR, también necesita PHP para poder acceder al módulo phar
, que normalmente está disponible de forma predeterminada. En UNIX, para comprobar si tienes este módulo o no, sólo necesitas ejecutar el siguiente comando en tu terminal:
$php-m | grep -i phar
Si se muestra Phar
o equivalente, entonces el módulo está instalado correctamente. La generación de informes en formato Xunit requiere el módulo xml
. En UNIX, para comprobar si tienes este módulo o no, sólo necesitas ejecutar el siguiente comando en tu terminal:
$php-m | grep -i xml
Si se muestra Xml
o equivalente, entonces el módulo está instalado correctamente. Si desea monitorear la tasa de cobertura de su código mediante las pruebas unitarias, será necesario el módulo Xdebug 2.3. En UNIX, para comprobar si tienes este módulo o no, sólo necesitas ejecutar el siguiente comando en tu terminal:
$php-v | grep -oi 'xdebug'
Si se muestra Xdebug
o equivalente, entonces el módulo está instalado correctamente.
Sólo tienes que descargar su archivo PHAR y almacenarlo donde desees, por ejemplo en /path/to/project/tests/atoum.phar
. Este archivo PHAR contiene la última versión de desarrollo para pasar la totalidad de las pruebas unitarias de atoum . El código fuente de atoum también está disponible a través del repositorio de GitHub. Para comprobar si atoum funciona correctamente con su configuración, puede ejecutar todas sus pruebas unitarias. Para hacer eso, solo necesitas ejecutar el siguiente comando en tu terminal:
$ php atomum.phar --prueba-it
Usando su editor de texto preferido, cree la path/to/project/tests/units/helloWorld.php
y agregue el siguiente código:
<?phpnamespace sellerprojecttestsunits;require_once 'ruta/a/atoum.phar';include_once 'ruta/a/proyecto/clases/helloWorld.php';use atoumatoum;use sellerproject;clase helloWorld extiende atoumtest {función pública testSay() {$holaMundo = nuevo proyectoholaMundo();$this->string($holaMundo->say())->isEqualTo('¡Hola Mundo!'); } }
Inicie su terminal y ejecute el siguiente comando:
$ php ruta/a/prueba/archivo[ingresar]
Debería obtener el siguiente resultado o algo equivalente:
> atomum versión XXX de Frédéric Hardy. Error: excepción desatendida: la clase probada 'vendorprojecthelloWorld' no existe para la clase de prueba 'vendorprojecttestsunitshelloWorld'
Usando nuevamente su editor de texto preferido, cree la path/to/project/classes/helloWorld.php
y agregue el siguiente código:
<?phpnamespace proveedorproyecto;clase holaMundo {función pública decir() {return '¡Hola mundo!'; } }
En la misma terminal, ejecute el siguiente comando una vez más:
$ php ruta/a/prueba/archivo[ingresar]
Debería obtener el siguiente resultado, o algo equivalente:
> atoum versión 288 de Frédéric Hardy.> Ejecutar sellerprojecttestsunitshelloWorld... [S_________________________________________________________][1/1] => Duración de la prueba: 0,00 segundos. => Uso de memoria: 0,25 Mb.> Duración total de la prueba: 0,00 segundos.> Uso total de la memoria de prueba: 0,25 Mb.> Valor de cobertura del código: 100,00%> Duración de la ejecución: 0,08 segundos.> Éxito (1 prueba, 1 método, 2 afirmaciones , 0 error, 0 excepción)!
<?phpnamespace sellerprojecttestsunits;require_once 'ruta/a/atoum.phar';include_once 'ruta/a/proyecto/clases/helloWorld.php';use atoumatoum;use sellerproject;clase helloWorld extiende atoumtest {función pública prueba__construcción() {$holaMundo = nuevo proyectoholaMundo();$this->string($holaMundo->say())->isEqualTo('¡Hola!') ->string($holaMundo->say($nombre = 'Frédéric Hardy'))->isEqualTo('Hola ' . $nombre . '!') ; } }
La documentación de atomum aún se está escribiendo. Cualquier ayuda para mejorarlo será apreciada. Sin embargo, si desea explorar más a fondo las posibilidades de atoum , le recomendamos:
Ejecutando en su terminal, ya sea el comando php atoum.phar -h
o el comando php scripts/runner.php -h
,
Explorando el contenido del directorio configurations
en el código fuente de atoum , ya que contiene ejemplos de archivos de configuración,
Explorando el contenido del directorio tests/unit/classes
en el código fuente de atoum , ya que contiene todas las pruebas unitarias,
Lea las diapositivas de la conferencia (en francés) al respecto, disponibles en línea,
Lea la wiki (francesa),
Únase al canal de discusión,
Haga preguntas por correo electrónico a la dirección support[AT]atoum(DOT)org .
En este caso, lo primero que querrás hacer es confirmar si tienes la última versión del archivo. Sólo necesitas descargarlo nuevamente. Si aún no funciona, ejecute el siguiente comando en una ventana de terminal:
$ php -n átomo.phar -v
Si obtiene el número de versión de atoum , entonces el problema proviene de su configuración de PHP. En la mayoría de los casos, la causa estaría en extensiones, que podrían ser incompatibles con el formato PHAR o que impedirían la ejecución de archivos PHAR como medida de seguridad. La extensión ioncube
, por ejemplo, parece incompatible con los archivos PHAR y, por lo tanto, debe desactivarla si la está utilizando, comentando la siguiente línea de su php.ini
, anteponiéndola con el prefijo ;
personaje:
zend_extension = /path/to/ioncube_loader*.*
La extensión suhosin
impide la ejecución de archivos PHAR, por lo tanto se debe modificar su configuración predeterminada para poder usar atoum , agregando la siguiente línea en su archivo php.ini
:
suhosin.executor.include.whitelist="phar"
Finalmente, si ejecutar atoum hace que la pantalla muestre caracteres como ???%
, esto se debe a que la directiva detect_unicode
dentro de su archivo php.ini
está configurada en 1. Para solucionar el problema, solo necesita configurarla en 0 editando su archivo php.ini
o ejecutando atoum con el siguiente comando:
$ php -d detect_unicode=0 atoum.phar [opciones]
Si estas tres operaciones no permiten que atoum funcione, le sugerimos enviar un correo electrónico a la dirección support[AT]atoum(DOT)org , describiendo detalladamente su configuración y su problema. También puede pedir ayuda al personal de desarrollo de atoum en el canal de discusión del repositorio de atoum.
__COMPILER_HALT_OFFSET__
ya definida /path/to/atoum.phar
Este error se debe al hecho de que el archivo atoum PHAR está incluido en más de un lugar dentro de su código usando include
o require
. Para solucionar este problema, solo necesita incluir el archivo usando solo include_once
o require_once
, para asegurarse de que no se incluya varias veces.
APC es un marco gratuito, abierto y robusto para almacenar en caché y optimizar el código intermedio PHP distribuido bajo la forma de una extensión PHP. Al probar clases que usan APC, es posible que reciba algún mensaje de error que muestre que la función apc_fetch
no puede recuperar un valor. Como toda extensión PHP, APC tiene algunas opciones de configuración para habilitarla:
apc.enabled
si habilitar o deshabilitar APC,
apc.enable_cli
, si se debe habilitar o deshabilitar APC para PHP CLI.
Para usar APC con atoum , debe configurar apc.enabled
y apc.enable_cli
en 1
; de lo contrario, no se habilitará para la versión PHP CLI, que utiliza atoum .
Al usar atoum y objetos burlones, en algún momento obtendrás errores de segmentación provenientes de PHP. Estos errores de segmentación son causados por XDebug en una versión anterior a 2.1.0, que tiene problemas para manejar la reflexión en algunos casos. Para verificar la versión actual de XDebug, puede ejecutar php -v
. Para solucionar este problema, debe actualizar XDebug a la última versión estable. Si no puede actualizar XDebug en su sistema, aún puede desactivar la extensión para evitar errores de segmentación. Para asegurarse de que XDebug se haya actualizado o deshabilitado correctamente, puede ejecutar php -v
. Cuando haya terminado de actualizar o deshabilitar XDebug, ejecute php atoum.phar --test-it
para asegurarse de que todos los errores de segmentación hayan desaparecido y que atoum esté funcionando.
¿Busca una hoja de ruta?
Aquí está el trabajo en progreso,
Y ahí lo que vendrá en próximos lanzamientos.
Atoum ha sido creado por Frédéric Hardy. Ahora está dirigido por una sólida comunidad de contribuyentes. Puede encontrarlos en la lista de confirmadores o en el equipo de Colaboradores.
atoum se publica bajo la licencia BSD-3-Clause. Consulte el archivo de LICENCIA incluido para obtener más detalles.