{"id":230164,"date":"2022-11-29T16:20:00","date_gmt":"2022-11-29T13:20:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230164"},"modified":"2022-11-29T16:20:13","modified_gmt":"2022-11-29T13:20:13","slug":"escritura-de-pruebas-unitarias-con-phpunit-parte-3-configuracion-xml","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/escritura-de-pruebas-unitarias-con-phpunit-parte-3-configuracion-xml\/","title":{"rendered":"Escritura de pruebas unitarias con PHPUnit, Parte 3: Configuraci\u00f3n XML"},"content":{"rendered":"\n<p>En las publicaciones anteriores de esta serie, he cubierto los siguientes dos temas:<\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/escritura-de-pruebas-unitarias-con-phpunit-parte-1-la-configuracion\/\" title=\"Escritura de pruebas unitarias con PHPUnit, Parte 1: La configuraci\u00f3n\">Escritura de pruebas unitarias con PHPUnit, Parte 1: La configuraci\u00f3n<\/a><strong>.<\/strong> Una gu\u00eda para comenzar a escribir pruebas de PHPUnit mediante el uso de un cach\u00e9 b\u00e1sico y el m\u00e9todo de configuraci\u00f3n del marco.<\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/escritura-de-pruebas-unitarias-con-phpunit-parte-2-el-derribo\/\" title=\"Escritura de pruebas unitarias con PHPUnit, Parte 2: El derribo.\">Escritura de pruebas unitarias con PHPUnit, Parte 2: El derribo.<\/a> Un tutorial sobre c\u00f3mo escribir pruebas unitarias que aprovechen adecuadamente los m\u00e9todos de configuraci\u00f3n y desmontaje de PHPUnit.<\/li>\n<\/ol>\n<p>Cada uno de los anteriores est\u00e1 destinado a proporcionar una introducci\u00f3n sobre c\u00f3mo comenzar a escribir pruebas unitarias muy b\u00e1sicas. Las cosas pueden volverse m\u00e1s complejas, especialmente a medida que crece una aplicaci\u00f3n o un proyecto (pero eso siempre es cierto, \u00bfno?).<\/p>\n<p>Pero para asegurarse de que uno est\u00e9 preparado para eso, hay un componente final para las pruebas unitarias en el que creo que debemos centrarnos y es comprender el archivo de configuraci\u00f3n PHPUnit XML (que puede haber visto en otros proyectos como phpunit.xml).<\/p>\n<h2>Configuraci\u00f3n PHPUnit XML<\/h2>\n<p>Entonces, en esta publicaci\u00f3n, configurar\u00e9 un proyecto simple que usa PHPUnit, escribe algunas pruebas como las que ya hemos visto y aprovecha un archivo de configuraci\u00f3n para automatizar las pruebas.<\/p>\n<p>Adem\u00e1s, har\u00e9 lo que pueda para explicar mejor las partes necesarias del archivo de configuraci\u00f3n para que pueda incluir uno en su pr\u00f3ximo proyecto.<\/p>\n<h3>1 Eliminando los archivos<\/h3>\n<p>Antes de comenzar a escribir c\u00f3digo comprobable, es importante conocer los archivos que se necesitar\u00e1n para que el proceso funcione.<\/p>\n<p>La siguiente es, m\u00e1s o menos, c\u00f3mo <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">organizamos<\/a><\/strong> las cosas desde el principio de un proyecto:<\/p>\n<ul>\n<li>un directorio para las pruebas,<\/li>\n<li>el archivo <strong>phpunit.xml<\/strong><\/li>\n<\/ul>\n<p>Eventualmente, tambi\u00e9n ver\u00e1s:<\/p>\n<ul>\n<li>los archivos que componen el proyecto,<\/li>\n<li>las pruebas que verifican dichos archivos.<\/li>\n<\/ul>\n<p>En este punto, sin embargo, echemos un vistazo al archivo de configuraci\u00f3n XML y luego intentemos ejecutar PHPUnit autom\u00e1ticamente sin ning\u00fan otro par\u00e1metro.<\/p>\n<h3>2 Los fundamentos del archivo de configuraci\u00f3n<\/h3>\n<p>Primero, veamos el <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-00-phpunit-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">archivo de configuraci\u00f3n b\u00e1sica:<\/a><\/strong><\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n\n&lt;!-- http:\/\/phpunit.de\/manual\/4.1\/en\/appendixes.configuration.html --&gt;\n&lt;phpunit xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"http:\/\/schema.phpunit.de\/4.1\/phpunit.xsd\"\n         bootstrap=\".\/tests\/bootstrap.php\"\n         backupGlobals=\"false\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n&gt;\n  &lt;testsuites&gt;\n    &lt;testsuite name=\"AcmeTests\"&gt;\n      &lt;directory&gt;.\/tests&lt;\/directory&gt;\n    &lt;\/testsuite&gt;\n  &lt;\/testsuites&gt;\n\n  &lt;logging&gt;\n    &lt;log type=\"coverage-text\" target=\"php:\/\/stdout\" showUncoveredFiles=\"true\"&gt;&lt;\/log&gt;\n  &lt;\/logging&gt;\n&lt;\/phpunit&gt;\n<\/code><\/pre>\n<p>Ahora entendamos qu\u00e9 es exactamente lo que estamos viendo (aparte del XML simple).<\/p>\n<ul>\n<li><strong>phpunidad<\/strong>. El nodo principal hace el trabajo habitual de definir el esquema para el archivo XML, pero hay algunos otros componentes que nos preocupan:\n<ul>\n<li><strong>copias de seguridad globales.<\/strong> Esto en realidad est\u00e1 relacionado con una anotaci\u00f3n que podemos hacer en nuestro c\u00f3digo fuente. Las variables globales son algo que debemos tratar de evitar en la programaci\u00f3n orientada a objetos, pero si opta por usar una o necesita usar una, esto le indicar\u00e1 a PHPUnit que maneje los valores que mantienen las variables globales (y le dar\u00e1 la opci\u00f3n de restaurar a ellos). Generalmente dejo esto como est\u00e1.<\/li>\n<li><strong>oreja.<\/strong> Esto es opcional, pero si opta por incluir otros archivos con sus pruebas (como traer una biblioteca simulada, parte de WordPress o una biblioteca de terceros), esto le permitir\u00e1 definir la ubicaci\u00f3n de la secuencia de comandos que necesita. ejecutar. Burlarse y traer WordPress est\u00e1 fuera del alcance de esta publicaci\u00f3n, pero es algo que probablemente veremos en el futuro, ya que es \u00fatil al probar complementos. Por ahora, incluir\u00e9 un cargador autom\u00e1tico simple que b\u00e1sicamente agrega todos los archivos en la ra\u00edz del directorio del proyecto. La fuente completa se compartir\u00e1 m\u00e1s adelante en esta publicaci\u00f3n.<\/li>\n<li><strong>colores.<\/strong> Si desea que la consola imprima un informe de sus pruebas y lo haga usando colores (para ayudar a identificar m\u00e1s f\u00e1cilmente advertencias, avisos, errores, etc.), establezca esto en verdadero.<\/li>\n<li>Los siguientes son todos valores booleanos. Recomiendo establecerlos en <strong>verdadero<\/strong> para los informes m\u00e1s agresivos posibles. De esta manera, no se saldr\u00e1 con la suya simplemente con avisos o advertencias mientras solo se preocupa por los errores. Esto es m\u00e1s un ejercicio de calidad de c\u00f3digo que cualquier otra cosa.\n<ul>\n<li><strong>convertErrorsToExceptions<\/strong><\/li>\n<li><strong>convertAvisosEnExcepciones<\/strong><\/li>\n<li><strong>convertWarningsToExceptions<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Los conjuntos de pruebas<\/strong> est\u00e1n formados por colecciones de pruebas. Dado que un proyecto determinado puede tener varias pruebas, es importante asegurarse de asignar a cada suite un nombre \u00fanico y hacer referencia a la ruta adecuada al grupo de pruebas. Para nuestro ejemplo, solo vamos a tener un solo conjunto de pruebas y est\u00e1 ubicado en el directorio de <strong>pruebas<\/strong>.<\/li>\n<li><strong>el registro<\/strong> es una caracter\u00edstica que puede ser tan simple como imprimir datos en la consola o usar una biblioteca de terceros (como <strong><a href=\"https:\/\/confluence.atlassian.com\/clover\/clover-documentation-home-71598318.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Clover<\/a><\/strong>) para generar informes que ayuden con la integraci\u00f3n continua. Dado que todav\u00eda tengo que discutir esto \u00faltimo en cualquiera de mis publicaciones anteriores, nos quedaremos con la consola como nuestro principal m\u00e9todo de salida. Por lo tanto, tenemos php <strong>:\/\/stdout<\/strong> como nuestra \u00fanica salida de registro.<\/li>\n<\/ul>\n<p>Dicho todo esto, nuestro archivo XML tiene todo lo que PHPUnit necesita para ejecutarse sin ning\u00fan otro par\u00e1metro.<\/p>\n<p>Recuerde, sin embargo, antes de continuar con el resto de este art\u00edculo, asumo que ha instalado PHPUnit globalmente en su sistema usando Composer. De lo contrario, revise <strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/compositor-para-wordpress-parte-1\/\" title=\"este art\u00edculo\">este art\u00edculo<\/a><\/strong>, ya que le proporcionar\u00e1 instrucciones sobre c\u00f3mo hacerlo.<\/p>\n<p>Una vez hecho esto, puede verificar que PHPUnit est\u00e9 instalado ingresando el siguiente comando en su terminal:<\/p>\n<pre><code>$ which phpunit<\/code><\/pre>\n<p>Y deber\u00edas ver algo como lo siguiente:<\/p>\n<\/p>\n<p>Si ve algo como lo anterior, puede ejecutar PHPUnit en cualquier lugar de su sistema.<\/p>\n<h3>3 El archivo Bootstrap<\/h3>\n<p>Antes de continuar, escribamos un archivo de arranque b\u00e1sico. Lo llamaremos <strong>bootstrap.php<\/strong> y lo colocaremos en nuestro directorio de <strong>pruebas<\/strong>. Incluir\u00e1 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-01-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lo siguiente:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\/\/ This array has a single file but could whole the contents of an entire directory.\n$files = [\n    dirname(__DIR__).'\/AcmeCache.php',\n];\n\nforeach ($files as $file) {\n    if (file_exists($file)) {\n        require_once $file;\n    }\n}\n<\/code><\/pre>\n<p>Este es un &quot;cargador autom\u00e1tico&quot; simple (que vacilante lo llamo as\u00ed dado que solo est\u00e1 iterando a trav\u00e9s de archivos y requiriendolos, pero funciona para nuestros prop\u00f3sitos).<\/p>\n<p>En este punto, configuremos una prueba b\u00e1sica.<\/p>\n<h3>4 Una prueba b\u00e1sica que falla<\/h3>\n<p>Si lee algo sobre el desarrollo basado en pruebas, es probable que escuche sobre el ciclo de repetici\u00f3n rojo-verde. Hay mucho que decir al respecto y recomiendo <strong><a href=\"http:\/\/blog.cleancoder.com\/uncle-bob\/2014\/12\/17\/TheCyclesOfTDD.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">leerlo<\/a><\/strong>, pero no es el prop\u00f3sito de esta publicaci\u00f3n.<\/p>\n<p>En cambio, estamos m\u00e1s enfocados en escribir pruebas que coincidan con lo que necesitamos hacer, \u00bfverdad? As\u00ed que dicho esto, hagamos lo siguiente:<\/p>\n<ol>\n<li>cree un directorio del cual tendr\u00e1 algunos archivos PHP b\u00e1sicos que probaremos,<\/li>\n<li>en la ra\u00edz del directorio, tambi\u00e9n cree <strong>phpunit.xml<\/strong> y rell\u00e9nelo usando el c\u00f3digo compartido anteriormente en esta publicaci\u00f3n<\/li>\n<li>cree un directorio de <strong>pruebas<\/strong> donde colocaremos nuestras pruebas.<\/li>\n<\/ol>\n<p>Ahora, desde la Terminal, cambie el directorio al directorio del proyecto (que ciertamente falta, por ahora) y luego simplemente ejecute <strong>php<em><\/em><\/strong> unit<em><\/em>:<\/p>\n<pre><code>$ phpunit<\/code><\/pre>\n<p>Suponiendo que todo est\u00e9 configurado correctamente, deber\u00eda ver algo como esto:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7588ea742f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7588ea742f.png\" alt=\"Escritura de pruebas unitarias con PHPUnit, Parte 3: Configuraci\u00f3n XML\"><\/a><\/p>\n<p>Como no tenemos c\u00f3digo ni pruebas, naturalmente vamos a ver el resultado anterior, \u00bfverdad? Entonces, escribamos una sola prueba que se ejecutar\u00e1 (y fallar\u00e1) ya que no hay c\u00f3digo para probar.<\/p>\n<p>Primero, en el directorio de <strong>pruebas<\/strong>, cree un archivo llamado <strong>AcmeCacheTest.php.<\/strong> Y hagamos que haga algo simple como <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-03-failing-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">instanciar un objeto de cach\u00e9<\/a><\/strong> que eventualmente crearemos.<\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n}\n<\/code><\/pre>\n<p>Antes de ejecutar la prueba, tenga en cuenta que nosotros:<\/p>\n<ol>\n<li>Aseg\u00farese de <strong>usar PHPUnitFrameworkTestCase<\/strong><\/li>\n<li>Y hacer que nuestra clase <strong>ampl\u00ede TestCase<\/strong><\/li>\n<\/ol>\n<p>Esto es parte de lo que hace que usar PHPUnit sea tan f\u00e1cil. Una vez hecho esto, ejecute el siguiente c\u00f3digo desde la ra\u00edz de su proyecto:<\/p>\n<pre><code>$ phpunit<\/code><\/pre>\n<p>Despu\u00e9s de eso, deber\u00edas ver lo siguiente:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75891b9ec8.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75891b9ec8.png\" alt=\"Escritura de pruebas unitarias con PHPUnit, Parte 3: Configuraci\u00f3n XML\"><\/a><\/p>\n<p>Tenga en cuenta que esto generar\u00e1 una prueba fallida y le dir\u00e1 <strong>d\u00f3nde<\/strong> se encontr\u00f3 el problema, el archivo y la l\u00ednea.<\/p>\n<p>Para arreglar esto, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-04-acme-cache-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">necesitamos escribir una clase:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nclass AcmeCache\n{\n    private $duration;\n\n    public function __construct()\n    {\n        $this-&gt;duration = 43200;\n    }\n\n    public function setDuration(int $duration)\n    {\n        $this-&gt;duration = $duration;\n    }\n\n    public function getDuration(): int\n    {\n        return $this-&gt;duration;\n    }\n}\n<\/code><\/pre>\n<h3>4 Algunas pruebas b\u00e1sicas para pasar<\/h3>\n<p>La prueba de aprobaci\u00f3n b\u00e1sica (que se basar\u00e1 en el c\u00f3digo anterior) incluir\u00e1 lo siguiente:<\/p>\n<ul>\n<li>un archivo con espacio de nombres,<\/li>\n<li>representar\u00e1 un cach\u00e9 simple,<\/li>\n<li>PHPUnit lo cargar\u00e1 autom\u00e1ticamente utilizando el archivo <strong>bootstrap.php compartido anteriormente<\/strong><\/li>\n<li>y tendr\u00e1 una duraci\u00f3n establecida en su constructor junto con un setter y getter para el valor<\/li>\n<\/ul>\n<p>Primero, probemos que podemos configurar la clase y que no es nula. Esta es una afirmaci\u00f3n un poco innecesaria ya que sabemos que tendremos una clase correctamente instanciada, pero nos pone en el ritmo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-03-failing-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de escribir pruebas:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n}\n<\/code><\/pre>\n<p>Y ejecuta la prueba:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75894bbad2.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75894bbad2.png\" alt=\"Escritura de pruebas unitarias con PHPUnit, Parte 3: Configuraci\u00f3n XML\"><\/a><\/p>\n<p>A continuaci\u00f3n, verifiquemos que el valor predeterminado del <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-05-test-2-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cach\u00e9 est\u00e9 establecido:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n\n    public function testDefaultCacheValue()\n    {\n        $this-&gt;assertSame(43200, $this-&gt;cache-&gt;getDuration());\n    }\n}\n<\/code><\/pre>\n<p>Al igual que con el paso anterior, ejecute las pruebas y ahora deber\u00eda ver dos pruebas aprobadas:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589770dbe.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589770dbe.png\" alt=\"Escritura de pruebas unitarias con PHPUnit, Parte 3: Configuraci\u00f3n XML\"><\/a><\/p>\n<p>Finalmente, probemos para ver si podemos <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-05-test-3-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cambiar el valor con \u00e9xito:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n\n    public function testDefaultCacheValue()\n    {\n        $this-&gt;assertSame(43200, $this-&gt;cache-&gt;getDuration());\n    }\n\n    public function testSetCustomDuration()\n    {\n        $duration = 4200;\n\n        $this-&gt;cache-&gt;setDuration($duration);\n        $this-&gt;assertSame($duration, $this-&gt;cache-&gt;getDuration());\n    }\n}\n<\/code><\/pre>\n<p>Y las \u00faltimas tres pruebas de aprobaci\u00f3n:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589a7745a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589a7745a.png\" alt=\"Escritura de pruebas unitarias con PHPUnit, Parte 3: Configuraci\u00f3n XML\"><\/a><\/p>\n<p>Y ah\u00ed lo tienes:<\/p>\n<ol>\n<li>un archivo PHPUnit XML,<\/li>\n<li>un simple arranque,<\/li>\n<li>una \u00fanica clase con espacio de nombres,<\/li>\n<li>pruebas unitarias para cada m\u00e9todo de la clase<\/li>\n<\/ol>\n<p>De acuerdo, es simple, pero esto sienta las bases para mucho m\u00e1s de lo que muchas personas ya hacen con sus pruebas.<\/p>\n<p>Adem\u00e1s, le brinda algo sobre lo que construir a medida que sus habilidades de prueba se fortalecen.<\/p>\n<h2>\u00bfHay m\u00e1s? (\u00bfSiempre tiene la raz\u00f3n?)<\/h2>\n<p>Finalmente, si est\u00e1 ansioso por sumergirse realmente en el archivo de configuraci\u00f3n, puede leer la explicaci\u00f3n <strong><a href=\"https:\/\/phpunit.de\/manual\/6.5\/en\/appendixes.configuration.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">detallada del manual.<\/a><\/strong><\/p>\n<p>Sin embargo, tenga en cuenta que todo lo que se describe anteriormente pretende ser lo que necesita para comenzar a configurar su propio archivo de configuraci\u00f3n PHPUnit XML.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una gu\u00eda fundamental para comprender el archivo de configuraci\u00f3n XML de PHPUnit y c\u00f3mo vincularlo a pruebas unitarias m\u00e1s sencillas.<\/p>\n","protected":false},"author":1,"featured_media":163701,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,800,840],"tags":[1172],"class_list":["post-230164","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-php-2","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230164"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230164\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/163701"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}