<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Cincuenta Palabras]]></title><description><![CDATA[Cincuenta Palabras]]></description><link>https://blog.cincuentapalabras.co</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1664673046366/-4ofyRCru.png</url><title>Cincuenta Palabras</title><link>https://blog.cincuentapalabras.co</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 02 May 2026 02:20:18 GMT</lastBuildDate><atom:link href="https://blog.cincuentapalabras.co/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Arreglo]]></title><description><![CDATA[Un arreglo es una estantería numerado para tus datos. Cada elemento ocupa un espacio fijo, accesible al instante por su número de índice. Esto hace que las búsquedas sean increíblemente rápidas. Pero el estante tiene un tamaño fijo; una vez lleno, no...]]></description><link>https://blog.cincuentapalabras.co/arreglo</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/arreglo</guid><category><![CDATA[arreglo]]></category><category><![CDATA[fundamentos de programacion]]></category><category><![CDATA[ciencias de la computacion]]></category><category><![CDATA[estructuras de datos]]></category><category><![CDATA[array]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[ingeniería de software]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 05 Oct 2025 23:27:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759705324049/646df4c6-a4c7-4fa7-87dc-5b034b2cebb8.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Un arreglo es una estantería numerado para tus datos. Cada elemento ocupa un espacio fijo, accesible al instante por su número de índice. Esto hace que las búsquedas sean increíblemente rápidas. Pero el estante tiene un <strong>tamaño fijo</strong>; una vez lleno, no puedes añadir más espacio fácilmente. Es un organizador disciplinado.</p>
<pre><code class="lang-typescript"><span class="hljs-comment">// Un estante con tres espacios fijos</span>
<span class="hljs-keyword">const</span> estanteNumerado: <span class="hljs-built_in">string</span>[] = [<span class="hljs-string">"Libro"</span>, <span class="hljs-string">"Marco de Fotos"</span>, <span class="hljs-string">"Reloj"</span>];

<span class="hljs-comment">// Acceso instantáneo al elemento en el espacio 0 (índice base 0)</span>
<span class="hljs-keyword">const</span> primerElemento = estanteNumerado[<span class="hljs-number">0</span>]; <span class="hljs-comment">// "Libro"</span>

<span class="hljs-comment">// Acceso instantáneo al elemento en el espacio 1 (índice base 0)</span>
<span class="hljs-keyword">const</span> segundoElemento = estanteNumerado[<span class="hljs-number">1</span>]; <span class="hljs-comment">// "Marco de Fotos"</span>

<span class="hljs-comment">// Acceso instantáneo al elemento en el espacio 1 (índice base 0)</span>
<span class="hljs-keyword">const</span> tercerElemento = estanteNumerado[<span class="hljs-number">2</span>]; <span class="hljs-comment">// "Reloj"</span>
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/array">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[E - Efecto Esperado]]></title><description><![CDATA[Es la tercera sección del nombre.
Nos indica qué resultado estamos esperando al ejecutar la unidad de código bajo la situación simulada.
/** En este ejemplo las tres secciones del nombre están en el mismo texto
 * Avión es la unidad bajo pruebas
 * d...]]></description><link>https://blog.cincuentapalabras.co/use-efecto-esperado</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/use-efecto-esperado</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 01:19:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/qDY9ahp0Mto/upload/v1666466724851/zHeJIgre_.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Es la tercera sección del <a target="_blank" href="https://blog.cincuentapalabras.co/use">nombre</a>.</p>
<p>Nos indica qué resultado estamos esperando al ejecutar la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> bajo la situación simulada.</p>
<pre><code class="lang-ts"><span class="hljs-comment">/** En este ejemplo las tres secciones del nombre están en el mismo texto
 * Avión es la unidad bajo pruebas
 * despegar sin parámetros es la situación a probar
 */</span>
test(<span class="hljs-string">"Avión, despegar sin parámetros, el estado del avión debe ser VOLANDO luego del despegue"</span>, <span class="hljs-function">() =&gt;</span> {});

<span class="hljs-comment">/** En este ejemplo la primera sección del nombre de la prueba está
 * en un grupo ya que se van a realizar varias pruebas sobre la misma
 * unidad
 * despegar sin parámetros es la situación a probar
 */</span>
group(<span class="hljs-string">"Avion"</span>, <span class="hljs-function">() =&gt;</span> {
  test(<span class="hljs-string">"despegar sin parámetros, el estado del avión debe ser VOLANDO luego del despegue"</span>, <span class="hljs-function">() =&gt;</span> {});

  test(<span class="hljs-string">"despegar con parámetro hayLluvia definido en true, el estado del avión debe ser VOLANDO luego del despegue"</span>, <span class="hljs-function">() =&gt;</span> {});
});
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/use-expected-value">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[S - Situación]]></title><description><![CDATA[Es la segunda sección del nombre..
Nos indica específicamente qué caso vamos a validar en la prueba, incluyendo los detalles que la hacen relevante.
/** En este ejemplo las tres secciones del nombre están en el mismo texto
 * Avión es la unidad bajo ...]]></description><link>https://blog.cincuentapalabras.co/use-situacion</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/use-situacion</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 01:12:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/m3th3rIQ9-w/upload/v1666461685826/GubOY_qDI.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Es la segunda sección del <a target="_blank" href="https://blog.cincuentapalabras.co/use">nombre</a>..</p>
<p>Nos indica específicamente qué caso vamos a validar en la <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba</a>, incluyendo los detalles que la hacen relevante.</p>
<pre><code class="lang-ts"><span class="hljs-comment">/** En este ejemplo las tres secciones del nombre están en el mismo texto
 * Avión es la unidad bajo pruebas
 * Las xxx simbolizan las demás secciones
 */</span>
test(<span class="hljs-string">"Avión, despegar sin parámetros, xxx"</span>, <span class="hljs-function">() =&gt;</span> {});

<span class="hljs-comment">/** En este ejemplo la primera sección del nombre de la prueba está
 * en un grupo ya que se van a realizar varias pruebas sobre la misma
 * unidad
 * Las xxx simbolizan las demás secciones
 */</span>
group(<span class="hljs-string">"Avion"</span>, <span class="hljs-function">() =&gt;</span> {
  test(<span class="hljs-string">"despegar sin parámetros, xxx"</span>, <span class="hljs-function">() =&gt;</span> {});

  test(<span class="hljs-string">"despegar con parámetro hayLluvia definido en true, xxx"</span>, <span class="hljs-function">() =&gt;</span> {});
});
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/use-scenario">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[U - Unidad Bajo Prueba]]></title><description><![CDATA[Es la primera sección del nombre.
Nos indica específicamente cuál es la unidad que estamos sometiendo a prueba.
La unidad puede estar en el mismo texto que las demás secciones o separado en un grupo si vamos a crear varias pruebas unitarias para la m...]]></description><link>https://blog.cincuentapalabras.co/use-unidad-bajo-prueba</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/use-unidad-bajo-prueba</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 01:05:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/MJMqoesvtBk/upload/v1666459848838/3bIfVeOI4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Es la primera sección del <a target="_blank" href="https://blog.cincuentapalabras.co/use">nombre</a>.</p>
<p>Nos indica específicamente cuál es la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad</a> que estamos sometiendo a prueba.</p>
<p>La <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad</a> puede estar en el mismo texto que las demás secciones o separado en un grupo si vamos a crear varias <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">pruebas unitarias</a> para la misma <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad</a>.</p>
<pre><code class="lang-ts"><span class="hljs-comment">/** En este ejemplo las tres secciones del nombre están en el mismo texto
 * Las xxx simbolizan las demás secciones
 */</span>
test(<span class="hljs-string">"Avión, xxx, xxx"</span>, <span class="hljs-function">() =&gt;</span> {});

<span class="hljs-comment">/** En este ejemplo la primera sección del nombre de la prueba está
 * en un grupo ya que se van a realizar varias pruebas sobre la misma
 * unidad
 * Las xxx simbolizan las demás secciones
 */</span>
group(<span class="hljs-string">"Avion"</span>, <span class="hljs-function">() =&gt;</span> {
  test(<span class="hljs-string">"xxx, xxx"</span>, <span class="hljs-function">() =&gt;</span> {});

  test(<span class="hljs-string">"xxx, xxx"</span>, <span class="hljs-function">() =&gt;</span> {});
});
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/use-unit-under-test">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[USE - Nombre de la Prueba]]></title><description><![CDATA[Es la estructura que usamos para nombrar una prueba unitaria de modo que sea identificada y se entienda el contexto de la misma.Cada letra representa una sección:

Unidad bajo prueba: ¿Qué unidad estamos probando?
Situación o entradas a la unidad: ¿Q...]]></description><link>https://blog.cincuentapalabras.co/use</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/use</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 01:00:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/cHX_Eih2hkY/upload/v1666458163102/SCUaP8-ij.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Es la estructura que usamos para nombrar una <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a> de modo que sea identificada y se entienda el contexto de la misma.<br />Cada letra representa una sección:</p>
<ul>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/use-unidad-bajo-prueba">Unidad bajo prueba</a>: ¿Qué <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad</a> estamos probando?</li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/use-situacion">Situación o entradas a la unidad</a>: ¿Qué situación estamos simulando?</li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/use-efecto-esperado">Efecto esperado</a>: ¿Qué resultado espero?</li>
</ul>
<p><a target="_blank" href="https://blog.fiftywords.co/use">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Afirmar]]></title><description><![CDATA[En esta sección es donde validamos que, efectivamente, la unidad de código arroje el resultado esperado ante la situación simulada.
Solo debe validarse un único punto de salida por cada prueba unitaria y en ese punto de salida es que se enfoca esta s...]]></description><link>https://blog.cincuentapalabras.co/afirmar</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/afirmar</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 00:49:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/1F4MukO0UNg/upload/v1665714164928/zsTHgWecw.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En esta sección es donde validamos que, efectivamente, la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> arroje el resultado esperado ante la situación simulada.</p>
<p>Solo debe validarse un único <a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-salida">punto de salida</a> por cada <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a> y en ese <a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-salida">punto de salida</a> es que se enfoca esta sección.</p>
<pre><code class="lang-ts">test(<span class="hljs-string">"El estado del avión debe ser VOLANDO luego del despegue"</span>, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-comment">/// Arreglar</span>
  <span class="hljs-keyword">const</span> motorFalso: IMotor = <span class="hljs-keyword">new</span> MotorFalso();
  <span class="hljs-keyword">const</span> tanqueDeCombustibleFalso: ITanque = <span class="hljs-keyword">new</span> TanqueFalso();
  <span class="hljs-keyword">const</span> avion: Avion = <span class="hljs-keyword">new</span> Avion(motorFalso, tanqueDeCombustibleFalso);

  <span class="hljs-comment">/// Actuar</span>
  avion.despegar();

  <span class="hljs-comment">/**
   * Notar que claramente demarcamos la sección
   * Afirmar y validamos en ella que el resultado
   * obtenido sea equivalente al resultado esperado
   */</span>

  <span class="hljs-comment">/// Afirmar</span>
  assert(avion.estadoActual, EstadoAvion.VOLANDO);
});
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/assert">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Actuar]]></title><description><![CDATA[En esta sección es donde ejecutamos la unidad de código que vamos a probar a través de su punto de entrada usando los parámetros necesarios para simular la situación que vamos a validar en la prueba unitaria.
test("El estado del avión debe ser VOLAND...]]></description><link>https://blog.cincuentapalabras.co/actuar</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/actuar</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 00:37:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/n2NBgIx3A28/upload/v1665713096332/OIApE0yqn.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En esta sección es donde ejecutamos la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> que vamos a probar a través de su <a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-entrada">punto de entrada</a> usando los parámetros necesarios para simular la situación que vamos a validar en la <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a>.</p>
<pre><code class="lang-ts">test(<span class="hljs-string">"El estado del avión debe ser VOLANDO luego del despegue"</span>, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-comment">/// Arreglar</span>
  <span class="hljs-keyword">const</span> motorFalso: IMotor = <span class="hljs-keyword">new</span> MotorFalso();
  <span class="hljs-keyword">const</span> tanqueDeCombustibleFalso: ITanque = <span class="hljs-keyword">new</span> TanqueFalso();
  <span class="hljs-keyword">const</span> avion: Avion = <span class="hljs-keyword">new</span> Avion(motorFalso, tanqueDeCombustibleFalso);

  <span class="hljs-comment">/**
   * Notar que claramente demarcamos la sección
   * Actuar e invocamos la unidad de código que
   * vamos a probar
   */</span>

  <span class="hljs-comment">/// Actuar</span>
  avion.despegar();

  <span class="hljs-comment">/// Resto de la prueba</span>
});
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/act">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Arreglar]]></title><description><![CDATA[En esta sección nos encargamos de inicializar todas las dependencias (reales o dobles de prueba) necesarias para simular la situación que vamos a validar en la prueba unitaria.
test("El estado del avión debe ser VOLANDO luego del despegue", () => {
 ...]]></description><link>https://blog.cincuentapalabras.co/arreglar</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/arreglar</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 00:34:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/Oaqk7qqNh_c/upload/v1665710088425/Jos5wrsvE.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En esta sección nos encargamos de inicializar todas las dependencias (reales o <a target="_blank" href="https://blog.cincuentapalabras.co/doble-de-prueba">dobles de prueba</a>) necesarias para simular la situación que vamos a validar en la <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a>.</p>
<pre><code>test(<span class="hljs-string">"El estado del avión debe ser VOLANDO luego del despegue"</span>, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-comment">/**
   * Notar que claramente demarcamos la sección
   * Arreglar e inicializamos en ella todas las
   * dependencias requeridas para crear la unidad
   * que vamos a probar (Un avión en este caso)
   */</span>

  <span class="hljs-comment">/// Arreglar</span>
  <span class="hljs-keyword">const</span> motorFalso: IMotor = <span class="hljs-keyword">new</span> MotorFalso();
  <span class="hljs-keyword">const</span> tanqueDeCombustibleFalso: ITanque = <span class="hljs-keyword">new</span> TanqueFalso();
  <span class="hljs-keyword">const</span> avion: Avion = <span class="hljs-keyword">new</span> Avion(motorFalso, tanqueDeCombustibleFalso);

  <span class="hljs-comment">/// Resto de la prueba</span>
});
</code></pre><p><a target="_blank" href="https://blog.fiftywords.co/arrange">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[AAA - Estructura de la Prueba]]></title><description><![CDATA[Es la estructura que usamos para una prueba unitaria.
Cada letra representa una sección:

Arreglar: Las dependencias para simular la situación a validar.
Actuar: Ejecute la unidad de código.
Afirmar: Que el resultado final sea el esperado.

Se sugier...]]></description><link>https://blog.cincuentapalabras.co/aaa</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/aaa</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 00:28:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/_LZbDkRaedE/upload/v1665709279711/WDEU3CV8-.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Es la estructura que usamos para una <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a>.</p>
<p>Cada letra representa una sección:</p>
<ul>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/arreglar">Arreglar</a>: Las dependencias para simular la situación a validar.</li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/actuar">Actuar</a>: Ejecute la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/afirmar">Afirmar</a>: Que el resultado final sea el esperado.</li>
</ul>
<p>Se sugiere que cada sección esté bien demarcada en la <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a>.</p>
<p><a target="_blank" href="https://blog.fiftywords.co/aaa">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[- Stub -]]></title><description><![CDATA[Doble de prueba usado para simular una dependencia externa que envía información hacia la unidad de código.
Permite controlar a nuestro antojo la información recibida por la unidad de código.
Pueden existir varios Stub en una prueba.
Ya que inserta i...]]></description><link>https://blog.cincuentapalabras.co/stub</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/stub</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[tests]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 00:14:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/rTwhmFSoXC8/upload/v1665021202262/pj-EGRhXjh.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://blog.cincuentapalabras.co/doble-de-prueba">Doble de prueba</a> usado para simular una dependencia externa que <strong>envía</strong> información hacia la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</p>
<p>Permite controlar a nuestro antojo la información recibida por la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</p>
<p>Pueden existir varios Stub en una <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba</a>.</p>
<p>Ya que inserta información a la <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba</a> NO SE HACEN VALIDACIONES SOBRE STUBS.</p>
<pre><code class="lang-ts"><span class="hljs-keyword">class</span> Persona {
  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">private</span> _nombre: <span class="hljs-built_in">string</span>, <span class="hljs-keyword">private</span> _apellido: <span class="hljs-built_in">string</span></span>) {}

  <span class="hljs-keyword">public</span> get nombre() {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>._nombre;
  }

  <span class="hljs-keyword">public</span> get apellido() {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>._apellido;
  }
}

<span class="hljs-comment">/**
 * Interfaz requerida para leer personas desde una
 * base de datos
 * */</span>
<span class="hljs-keyword">interface</span> ILectorDePersonasDeBD {
  leerTodasLasPersonas(): <span class="hljs-built_in">Promise</span>&lt;<span class="hljs-built_in">Array</span>&lt;Persona&gt;&gt;;
}

<span class="hljs-comment">/**
 * Implementación de un Stub de ILectorDePersonasDeBD
 * Con este stub podemos simular que una base de datos
 * retorna ciertas personas
 */</span>
<span class="hljs-keyword">class</span> StubLectorDePersonasDeBD <span class="hljs-keyword">implements</span> ILectorDePersonasDeBD {
  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">private</span> personas: <span class="hljs-built_in">Array</span>&lt;Persona&gt;</span>) {}

  <span class="hljs-keyword">async</span> leerTodasLasPersonas(): <span class="hljs-built_in">Promise</span>&lt;Persona[]&gt; {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.personas;
  }
}

<span class="hljs-comment">/**
 * Clase real que vamos a probar
 */</span>
<span class="hljs-keyword">class</span> MapeadorDePersonas {
  <span class="hljs-comment">/**
   * Inicializa una instancia de MapeadorDePersonas
   * @param lectorDePersonasDeBD Fuente de datos desde la cual leer personas
   */</span>
  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">private</span> lectorDePersonasDeBD: ILectorDePersonasDeBD</span>) {
    <span class="hljs-comment">/**
     * Por favor note que estamos esperando una instancia de ILectorDePersonasDeBD
     * Éste es el truco que nos permite enviar un Stub para simular una base de
     * datos real con nuestros datos falsos
     */</span>
  }

  <span class="hljs-comment">/** Método de MapeadorDePersonas que queremos probar*/</span>
  <span class="hljs-keyword">async</span> mapearPersonaANombreCompleto(): <span class="hljs-built_in">Promise</span>&lt;<span class="hljs-built_in">Array</span>&lt;<span class="hljs-built_in">String</span>&gt;&gt; {
    <span class="hljs-keyword">const</span> personas = <span class="hljs-keyword">await</span> <span class="hljs-built_in">this</span>.lectorDePersonasDeBD.leerTodasLasPersonas();

    <span class="hljs-keyword">return</span> personas.map(
      <span class="hljs-function">(<span class="hljs-params">persona: Persona</span>) =&gt;</span> <span class="hljs-string">`<span class="hljs-subst">${persona.nombre}</span> <span class="hljs-subst">${persona.apellido}</span>`</span>
    );
  }
}

<span class="hljs-comment">/** Inicio de la pruebas */</span>

<span class="hljs-comment">/** Inicializar las personas para la prueba */</span>
<span class="hljs-keyword">const</span> enriqueBunbury = <span class="hljs-keyword">new</span> Persona(<span class="hljs-string">"Enrique"</span>, <span class="hljs-string">"Bunbury"</span>);
<span class="hljs-keyword">const</span> pedroInfante = <span class="hljs-keyword">new</span> Persona(<span class="hljs-string">"Pedro"</span>, <span class="hljs-string">"Infante"</span>);

<span class="hljs-comment">/** Crear un Stub para simular que dos personas son leídas desde la base de datos a
 * la instancia de MapeadorDePersonas
 */</span>
<span class="hljs-keyword">const</span> stubLectorDePersonasDeBD: ILectorDePersonasDeBD =
  <span class="hljs-keyword">new</span> StubLectorDePersonasDeBD([enriqueBunbury, pedroInfante]);

<span class="hljs-comment">/** Enviamos el StubLectorDePersonasDeBD al MapeadorDePersonas a través del constructor*/</span>
<span class="hljs-keyword">const</span> mapeadorDePersonas: MapeadorDePersonas = <span class="hljs-keyword">new</span> MapeadorDePersonas(
  stubLectorDePersonasDeBD
);

<span class="hljs-comment">/** Llamamos el método mapearPersonaANombreCompleto para validar que está mapeando correctamente
 * cada persona a un nombre completo
 */</span>
mapeadorDePersonas.mapearPersonaANombreCompleto().then(<span class="hljs-function">(<span class="hljs-params">nombresCompletos</span>) =&gt;</span> {
  <span class="hljs-keyword">const</span> expectedFullNames = [<span class="hljs-string">"Enrique Bunbury"</span>, <span class="hljs-string">"Pedro Infante"</span>];
  nombresCompletos.forEach(<span class="hljs-function">(<span class="hljs-params">item, index</span>) =&gt;</span> {
    <span class="hljs-comment">/** Simula la validación de la prueba */</span>
    item === expectedFullNames[index];
  });
});

<span class="hljs-comment">/** Fin de la prueba */</span>
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/stub">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[- Mock -]]></title><description><![CDATA[Doble de prueba usado para simular una dependencia externa que recibe información enviada por la unidad de código.
Permite validar esta información.
Solo puede existir máximo UN MOCK en una prueba, ya que simula un punto de salida y solo se valida un...]]></description><link>https://blog.cincuentapalabras.co/mock</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/mock</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 00:08:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/ARWAWkJ68kA/upload/v1665017131388/loLBps4zh.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://blog.cincuentapalabras.co/doble-de-prueba">Doble de prueba</a> usado para simular una <a target="_blank" href="https://blog.cincuentapalabras.co/dependencia-externa-punto-de-salida">dependencia externa</a> que <strong>recibe</strong> información enviada por la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</p>
<p>Permite validar esta información.</p>
<p>Solo puede existir máximo <strong>UN MOCK</strong> en una prueba, ya que simula un <a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-salida">punto de salida</a> y solo se valida uno por <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a>.</p>
<pre><code class="lang-ts"><span class="hljs-comment">/** Interfaz que define una dependencia externa */</span>
<span class="hljs-keyword">interface</span> IRegistrador {
  registrarInfo(info: <span class="hljs-built_in">string</span>);
}

<span class="hljs-comment">/** Implementación real de la interfaz IRegistrador */</span>
<span class="hljs-keyword">class</span> RegistradorReal <span class="hljs-keyword">implements</span> IRegistrador {
  <span class="hljs-keyword">public</span> registrarInfo(info: <span class="hljs-built_in">string</span>) {
    <span class="hljs-built_in">console</span>.log(info);
  }
}

<span class="hljs-comment">/** Implementacióon Mock para verificar que
 * Calculadora.add está registrando correctamente */</span>
<span class="hljs-keyword">class</span> RegistradorMock <span class="hljs-keyword">implements</span> IRegistrador {
  <span class="hljs-comment">/** Campo privado para guardar la última información registrada */</span>
  <span class="hljs-keyword">private</span> informacionRecibidaParaRegistrar: <span class="hljs-built_in">string</span>;

  <span class="hljs-comment">/** Método definido por la interfaz IRegistrador*/</span>
  <span class="hljs-keyword">public</span> registrarInfo(info: <span class="hljs-built_in">string</span>) {
    <span class="hljs-comment">/** Asigna la info recibida a 
     * this.informacionRecibidaParaRegistrar para que podamos 
     * verificar más tarde que Calculadora.sumar envióla info correcta
     */</span>
    <span class="hljs-built_in">this</span>.informacionRecibidaParaRegistrar = info;
  }

  <span class="hljs-comment">/** Permite el acceso para validar la última información recibida */</span>
  <span class="hljs-keyword">public</span> get informacionRecibida(): <span class="hljs-built_in">string</span> {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.informacionRecibidaParaRegistrar;
  }
}

<span class="hljs-keyword">class</span> Calculadora {
  <span class="hljs-comment">/** Constructor que recibe la implementación de IRegistrador */</span>
  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">private</span> registrador: IRegistrador</span>) {}

  <span class="hljs-keyword">public</span> sumar(sumando: <span class="hljs-built_in">number</span>, otroSumando: <span class="hljs-built_in">number</span>): <span class="hljs-built_in">number</span> {
    <span class="hljs-comment">/** Usa la implementación de IRegistrador recibida para registrar
     * la información relacionada a la suma*/</span>
    <span class="hljs-built_in">this</span>.registrador.registrarInfo(<span class="hljs-string">`Sumará <span class="hljs-subst">${sumando}</span> y <span class="hljs-subst">${otroSumando}</span>`</span>);
    <span class="hljs-keyword">return</span> sumando + otroSumando;
  }
}

<span class="hljs-comment">/** Inicio de la prueba */</span>

<span class="hljs-comment">/** Inicializa un objeto RegistradorMock para validar que
 * Calculadora está registrando los datos correctamente
 */</span>
<span class="hljs-keyword">const</span> registradorMock: RegistradorMock = <span class="hljs-keyword">new</span> RegistradorMock();
<span class="hljs-comment">/** Envía el objeto RegistradorMock a Calculadora a través del constructor*/</span>
<span class="hljs-keyword">const</span> calculadora: Calculadora = <span class="hljs-keyword">new</span> Calculadora(registradorMock);
<span class="hljs-comment">/** Llamado al método sumar para validar que está registrando
 * correctamente la información */</span>
calculadora.sumar(<span class="hljs-number">4</span>, <span class="hljs-number">5</span>);

<span class="hljs-comment">/** Valida que la información registrada es la que se espera */</span>
registradorMock.informacionRecibida === <span class="hljs-string">"Sumará 4 y 5"</span>;

<span class="hljs-comment">/** Fin de la prueba */</span>
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/mock">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Doble de Prueba]]></title><description><![CDATA[Descripción:
Objeto falso que nos ayuda a simular la situación que necesitamos para una prueba unitaria.
Tipos:

Mock
Stub

No son necesarios para las pruebas pero son muy útiles para aquellos casos en los que usar un objeto real es complejo para la ...]]></description><link>https://blog.cincuentapalabras.co/doble-de-prueba</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/doble-de-prueba</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sun, 23 Oct 2022 00:03:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/1P6LZ8S8XJc/upload/v1664851887930/hZ1WC-kAq.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Descripción</strong>:</p>
<p>Objeto falso que nos ayuda a simular la situación que necesitamos para una <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a>.</p>
<p><strong>Tipos</strong>:</p>
<ul>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/mock">Mock</a></li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/stub">Stub</a></li>
</ul>
<p>No son necesarios para las pruebas pero son muy útiles para aquellos casos en los que usar un objeto real es complejo para la situación que queremos simular.</p>
<p><a target="_blank" href="https://blog.fiftywords.co/test-double">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Dependencia Externa, llamado a]]></title><description><![CDATA[El llamado a dependencia externa es, como su nombre lo indica, una interacción en la que la unidad de código envía información a una dependencia externa como:

Una base de datos
Una API HTTP
Una llamada RPC

function sumaConRegistro(
  sumando: numbe...]]></description><link>https://blog.cincuentapalabras.co/dependencia-externa-punto-de-salida</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/dependencia-externa-punto-de-salida</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:59:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/f4UbPVbJcjw/upload/v1664757475552/Z7a93PnWB.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>El llamado a dependencia externa es, como su nombre lo indica, una interacción en la que la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> <strong>envía</strong> información a una dependencia externa como:</p>
<ul>
<li>Una base de datos</li>
<li>Una API HTTP</li>
<li>Una llamada RPC</li>
</ul>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumaConRegistro</span>(<span class="hljs-params">
  sumando: number,
  otroSumando: number,
  registrador: IRegistrador
</span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-comment">/** Punto de salida =&gt; llamado a dependencia externa */</span>
  registrador.log(<span class="hljs-string">`Sumará: <span class="hljs-subst">${valorActual}</span> + <span class="hljs-subst">${sumando}</span>`</span>);

  <span class="hljs-keyword">return</span> otroSumando + sumando;
}
</code></pre><p>Para validarla se usa un <a target="_blank" href="https://blog.cincuentapalabras.co/doble-de-pruebas">doble de pruebas</a>, en este caso un <a target="_blank" href="https://blog.cincuentapalabras.co/mock">mock</a>.</p>
<p><a target="_blank" href="https://blog.fiftywords.co/external-dependency-exit-point">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Estado, cambio de]]></title><description><![CDATA[El cambio de estado es un efecto secundario generado al ejecutar una unidad de código.
Para validar el resultado debemos acceder al estado que haya cambiado, así que requiere tres pasos:

Ejecutar la unidad de código
Acceder al estado que haya cambia...]]></description><link>https://blog.cincuentapalabras.co/cambio-de-estado-punto-de-salida</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/cambio-de-estado-punto-de-salida</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:52:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/VlTJdP8ZY1c/upload/v1664754044900/_JUtxoEmT.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>El cambio de estado es un efecto secundario generado al ejecutar una <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</p>
<p>Para validar el resultado debemos acceder al estado que haya cambiado, así que requiere tres pasos:</p>
<ul>
<li>Ejecutar la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a></li>
<li>Acceder al estado que haya cambiado</li>
<li>Validar que tenga el valor que esperamos</li>
</ul>
<pre><code class="lang-ts"><span class="hljs-comment">/** Estado que es cambiado */</span>
<span class="hljs-keyword">let</span> valorActual = <span class="hljs-number">0</span>;

<span class="hljs-comment">/** Unidad de código que tiene un efecto secundario.
 * Cambia valorActual
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumar</span>(<span class="hljs-params">sumando: <span class="hljs-built_in">number</span></span>): <span class="hljs-title">void</span> </span>{
  <span class="hljs-comment">/**
   * Punto de salida =&gt; Efecto secundario, Cambio de estado
   */</span>
  valorActual += sumando;
}

<span class="hljs-comment">/**
 * Método de acceder el estado actual
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">obtenerValorActual</span>(<span class="hljs-params"></span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-keyword">return</span> valorActual;
}

<span class="hljs-comment">/** Ejecutar unidad de código */</span>
sumar(<span class="hljs-number">5</span>);

<span class="hljs-comment">/** Acceder al estado que cambia */</span>
<span class="hljs-keyword">const</span> valorAcumulado = obtenerValorActual();
<span class="hljs-comment">/** Validar que el valor obtenido sea el esperado */</span>
valorAcumulado === <span class="hljs-number">5</span>;
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/change-of-state-exit-point">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Retorno, valor de]]></title><description><![CDATA[El valor de retorno es el resultado obtenido directamente al ejecutar una unidad de código, usualmente denotado por la palabra reservada return.
Es el punto de salida más fácil de validar ya que, al obtener el resultado retornado por la unidad de cód...]]></description><link>https://blog.cincuentapalabras.co/valor-de-retorno-punto-de-salida</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/valor-de-retorno-punto-de-salida</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[tests]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:46:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/sckLONKzPJM/upload/v1664747856279/JdScf7W53.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>El valor de retorno es el resultado obtenido directamente al ejecutar una <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>, usualmente denotado por la palabra reservada <code>return</code>.</p>
<p>Es el <a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-salida">punto de salida</a> más fácil de validar ya que, al obtener el resultado retornado por la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>, podemos compararlo con el resultado esperado.</p>
<pre><code class="lang-ts"><span class="hljs-comment">/**
 * Es común indicar el tipo de retorno en el punto de entrada (firma)
 * En este caso es el último ```number``` el que especifica 
 * qué tipo retorna la unidad de código
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumar</span>(<span class="hljs-params">sumando: <span class="hljs-built_in">number</span>, otroSumando: <span class="hljs-built_in">number</span></span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-comment">/** Punto de salida valor de retorno */</span>
  <span class="hljs-keyword">return</span> sumando + otroSumando;
}
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/return-value-exit-point">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Punto de Salida]]></title><description><![CDATA[Descripción:
Resultado (verificable externamente) obtenido al ejecutar una unidad de código.
Tipos (RED):

Retorno, valor de. (Más fácil de validar)
Estado, cambio de
Dependencia externa, llamado a. (Más difícil de validar)

let valorActual = 0;

fun...]]></description><link>https://blog.cincuentapalabras.co/punto-de-salida</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/punto-de-salida</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:35:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/kFOTEAm6QuY/upload/v1664737507517/hTr-F97_Q.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Descripción</strong>:</p>
<p>Resultado (verificable externamente) obtenido al ejecutar una <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</p>
<p><strong>Tipos (RED)</strong>:</p>
<ul>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/valor-de-retorno-punto-de-salida">Retorno, valor de</a>. (Más fácil de validar)</li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/cambio-de-estado-punto-de-salida">Estado, cambio de</a></li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/dependencia-externa-punto-de-salida">Dependencia externa, llamado a</a>. (Más difícil de validar)</li>
</ul>
<pre><code class="lang-ts"><span class="hljs-keyword">let</span> valorActual = <span class="hljs-number">0</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumaConRegistro</span>(<span class="hljs-params">sumando: <span class="hljs-built_in">number</span>, registrador: IRegistrador</span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-comment">/** Punto de salida 1 =&gt; llamado a dependencia externa (D) */</span>
  registrador.log(<span class="hljs-string">`Sumará: <span class="hljs-subst">${valorActual}</span> + <span class="hljs-subst">${sumando}</span>`</span>);
  <span class="hljs-comment">/** Punto de salida 2 =&gt; cambio de estado (E) */</span>
  valorActual += sumando;

  <span class="hljs-comment">/** Punto de salida 3 =&gt; valor de retorno (R) */</span>
  <span class="hljs-keyword">return</span> valorActual;
}
</code></pre>
<p>Toda <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> tiene punto(s) de salida.</p>
<p><strong>Solo se valida un punto de salida por <a target="_blank" href="https://blog.cincuentapalabras.co/prueba-unitaria">prueba unitaria</a></strong></p>
<p><a target="_blank" href="https://blog.fiftywords.co/exit-point">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Cuerpo]]></title><description><![CDATA[Conjunto de instrucciones a ejecutarse en una unidad de código.
Puede ser tan complejo como se requiera, llamando múltiples funciones, módulos, etc.
function funcionCompleja(): number {
  /**
   * Inicio del cuerpo de la unidad de código
   */
  cons...]]></description><link>https://blog.cincuentapalabras.co/cuerpo-unidad-de-codigo</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/cuerpo-unidad-de-codigo</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:28:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/F4cJtI7HCMw/upload/v1664735107047/ZvxlN7XY7.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Conjunto de instrucciones a ejecutarse en una <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</p>
<p>Puede ser tan complejo como se requiera, llamando múltiples funciones, módulos, etc.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">funcionCompleja</span>(<span class="hljs-params"></span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-comment">/**
   * Inicio del cuerpo de la unidad de código
   */</span>
  <span class="hljs-keyword">const</span> primerValorDeRetorno = llamarOtraFuncion();
  <span class="hljs-keyword">const</span> preResultado = modulo1.funcionExterna(primerValorDeRetorno);
  <span class="hljs-keyword">const</span> resultado = preResultado.calcular();

  <span class="hljs-keyword">return</span> resultado;
  <span class="hljs-comment">/**
   * Inicio del cuerpo de la unidad de código
   */</span>
}
</code></pre><p><a target="_blank" href="https://blog.fiftywords.co/body-unit-of-code">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Punto de Entrada]]></title><description><![CDATA[Interfaz PÚBLICA a través de la cual nos comunicamos con una unidad de código para disparar su proceso.
Indica el nombre, parámetros recibidos y el tipo de retorno obtenido al ejecutar la unidad de código.
Una unidad de código SOLO TIENE UN PUNTO DE ...]]></description><link>https://blog.cincuentapalabras.co/punto-de-entrada</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/punto-de-entrada</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:19:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/16YxCJSoAek/upload/v1664728593181/ONhzRd7yT.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Interfaz <strong>PÚBLICA</strong> a través de la cual nos comunicamos con una <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> para disparar su proceso.</p>
<p>Indica el nombre, parámetros recibidos y el tipo de retorno obtenido al ejecutar la <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a>.</p>
<p>Una <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> <strong>SOLO TIENE UN PUNTO DE ENTRADA.</strong></p>
<pre><code class="lang-ts"><span class="hljs-comment">/** Entry point */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumar</span>(<span class="hljs-params">sumando: <span class="hljs-built_in">number</span>, otroSumando: <span class="hljs-built_in">number</span></span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-keyword">return</span> sumando + otroSumando;
}
</code></pre>
<p><a target="_blank" href="https://blog.fiftywords.co/entry-point">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Unidad de Código]]></title><description><![CDATA[Descripción:
Instrucciones ejecutadas desde la invocación del punto de entrada de un proceso hasta su terminación con un resultado verificable a través de uno o varios puntos de salida.
Composición:

Punto de entrada
Cuerpo
Punto(s) de salida

class ...]]></description><link>https://blog.cincuentapalabras.co/unidad-de-codigo</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/unidad-de-codigo</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit test]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:16:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/lFtttcsx5Vk/upload/v1664722542294/HHOBchCUd.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Descripción</strong>:</p>
<p>Instrucciones ejecutadas desde la invocación del punto de entrada de un proceso hasta su terminación con un resultado verificable a través de uno o varios puntos de salida.</p>
<p><strong>Composición</strong>:</p>
<ul>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-entrada">Punto de entrada</a></li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/cuerpo-unidad-de-codigo">Cuerpo</a></li>
<li><a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-salida">Punto(s) de salida</a></li>
</ul>
<pre><code><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Calculadora</span> </span>{
  private resultadoAcumulado: number = <span class="hljs-number">0</span>;

  <span class="hljs-comment">// Punto de entrada para la unidad de código *sumar*</span>
  public sumar(sumando: number): number {
    <span class="hljs-comment">/**
     * Inicio del cuerpo de la unidad de código
     */</span>

    <span class="hljs-comment">// Punto de salida</span>
    <span class="hljs-built_in">this</span>.resultadoAcumulado += sumando;

    <span class="hljs-comment">// Otro punto de salida</span>
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.resultadoAcumulado;

    <span class="hljs-comment">/**
     * Fin del cuerpo de la unidad de código
     */</span>
  }
}
</code></pre><p><strong>Ejemplos</strong>:</p>
<ul>
<li>Una función</li>
<li>Un método de un objeto</li>
<li>Una funcionalidad de un módulo.</li>
</ul>
<p><a target="_blank" href="https://blog.fiftywords.co/unit-of-code">🇺🇸 English version</a></p>
]]></content:encoded></item><item><title><![CDATA[Prueba Unitaria]]></title><description><![CDATA[Descripción:
Valida que una unidad de código se comporte correctamente en una situación simulada.
Características:

MUY rápidas
Correr 100% en memoria
Replicable en cualquier entorno
Independiente de otras pruebas unitarias
Antes, durante y después d...]]></description><link>https://blog.cincuentapalabras.co/prueba-unitaria</link><guid isPermaLink="true">https://blog.cincuentapalabras.co/prueba-unitaria</guid><category><![CDATA[unit testing]]></category><category><![CDATA[unit tests]]></category><category><![CDATA[Testing]]></category><category><![CDATA[test]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Juan E Quintero R]]></dc:creator><pubDate>Sat, 22 Oct 2022 23:11:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/aVvZJC0ynBQ/upload/v1664720421772/zhXFOcgCl.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Descripción</strong>:</p>
<p>Valida que una <a target="_blank" href="https://blog.cincuentapalabras.co/unidad-de-codigo">unidad de código</a> se comporte correctamente en una situación simulada.</p>
<p><strong>Características</strong>:</p>
<ul>
<li>MUY rápidas</li>
<li>Correr 100% en memoria</li>
<li>Replicable en cualquier entorno</li>
<li>Independiente de otras pruebas unitarias</li>
<li>Antes, durante y después del desarrollo</li>
<li>Solo valida una condición (por prueba unitaria): <a target="_blank" href="https://blog.cincuentapalabras.co/punto-de-salida">RED</a></li>
</ul>
<p><strong>Estructura</strong>:</p>
<p><a target="_blank" href="https://blog.cincuentapalabras.co/aaa">AAA</a></p>
<p><strong>Estructura del nombre</strong>:</p>
<p><a target="_blank" href="https://blog.cincuentapalabras.co/use">USE</a></p>
<p><a target="_blank" href="https://blog.fiftywords.co/unit-test">🇺🇸 English version</a></p>
]]></content:encoded></item></channel></rss>