Entropy es una biblioteca que proporciona herramientas para trabajar con pruebas aleatorias en PHPUnit, así como para probar sistemas que utilizan funciones aleatorias de PHP como rand
y shuffle
.
A veces, las pruebas unitarias requieren cambios en el estado global o cubren funciones que alteran ese estado. Si bien esta nunca es una situación ideal, a menudo puede resultar en la creación de dependencias inadvertidas en otras pruebas.
Al habilitar la función de reproducción aleatoria de pruebas de Entropy, se aleatoriza el orden de las pruebas, lo que ayuda a resaltar estas dependencias.
La mezcla de pruebas de Entropy también evita cambiar el orden de las pruebas usando la funcionalidad @depends
de PHPUnit; El trabajo futuro trabajará para garantizar que aún se pueda realizar la mezcla aleatoria para estas pruebas cuando sea apropiado.
A veces puede encontrarse en una situación en la que el rango de entradas para una función es tan grande que tomar una sección representativa de esas entradas es un uso más eficiente de sus recursos. Pero, ¿qué sucede si esa sección transversal tiene agujeros en los que las pruebas podrían fallar?
Una forma de solucionar esto es utilizar entradas aleatorias, donde las entradas se generan de tal manera que se obtenga una sección transversal aleatoria de los rangos. En otras palabras, utilizar rand
u otro enfoque no determinista similar.
Una extensión de esto, las pruebas basadas en propiedades es la práctica de aplicar entradas aleatorias a su aplicación o función y observar que la salida cumple con ciertas reglas o tiene ciertas propiedades relativas a la entrada, en lugar de realizar pruebas precisas de igualdad con un resultado conocido. colocar.
Al administrar la semilla aleatoria para sus pruebas, Entropy permite no solo el uso de estos enfoques, sino también hacerlos repetibles, ya sea aceptando una semilla fija o recuperándola de la última ejecución fallida hasta que pasó su conjunto de pruebas.
Puedes agregar esta biblioteca a tu proyecto usando Composer:
$ composer require datto/phpunit-entropy
Una vez configurado, puede ejecutar su conjunto de pruebas normalmente; el oyente se cuidará solo. En caso de error o falla de la prueba, la semilla utilizada se almacenará en un archivo temporal, de modo que en la siguiente ejecución se reutilizará, en lugar de generar una nueva semilla.
La semilla para el generador de números aleatorios se proporciona desde hasta cuatro ubicaciones, presentadas aquí en orden de prioridad.
Si se establece, la variable de entorno SEED
se utilizará para anular cualquier otra configuración. Se puede configurar mediante export
, pero se recomienda configurarlo solo para la ejecución actual:
SEED=123456 phpunit -c phpunit.xml tests
La semilla puede fijarse mediante configuración; consulte la sección Configuración a continuación.
Si falla una ejecución de prueba, la semilla utilizada se almacena en un archivo temporal. Luego se carga en una prueba posterior y persistirá hasta que la suite vuelva a tener éxito.
Si no se establece ninguna semilla mediante los métodos anteriores, el método final es utilizar la función rand
de PHP.
Una vez instalado a través de Composer, configurar el detector de prueba es simplemente una cuestión de alterar su archivo de configuración PHPUnit (a menudo phpunit.xml
):
< phpunit xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : noNamespaceSchemaLocation = " http://schema.phpunit.de/4.1/phpunit.xsd "
backupGlobals = " false "
colors = " true "
bootstrap = " bootstrap.php "
>
< listeners >
< listener class = " DattoPHPUnitEntropyListener " >
< arguments >
< array >
< element key = " seeding " >
< array >
< element key = " enabled " >
< boolean >true</ boolean >
</ element >
< element key = " seed " >
< integer >1234567</ integer >
</ element >
< element key = " file " >
< string >/tmp/phpentropy-seed</ string >
</ element >
</ array >
</ element >
< element key = " shuffle " >
< boolean >true</ boolean >
</ element >
</ array >
</ arguments >
</ listener >
</ listeners >
</ phpunit >
Si se establece en verdadero, el oyente generará el generador de números aleatorios.
Si configura la semilla mediante este argumento, solo se usará este valor para inicializar el generador de números aleatorios. Consulte la sección sobre prioridad de semillas a continuación.
Si se establece, este archivo se utilizará para almacenar la última semilla aleatoria fallida; el valor predeterminado es [TMPDIR LOCATION]/phpunit-entropy-seed
.
Si se establece en verdadero, el orden en que se ejecutan las pruebas unitarias será aleatorio (excepto para las suites donde se usa @depends
). Esto es útil para determinar e identificar dependencias entre pruebas.
Christopher Hoult <[email protected]>