# - Mock -

[Doble de prueba](https://blog.cincuentapalabras.co/doble-de-prueba) usado para simular una [dependencia externa](https://blog.cincuentapalabras.co/dependencia-externa-punto-de-salida) que **recibe** información enviada por la [unidad de código](https://blog.cincuentapalabras.co/unidad-de-codigo).

Permite validar esta información.

Solo puede existir máximo **UN MOCK** en una prueba, ya que simula un [punto de salida](https://blog.cincuentapalabras.co/punto-de-salida) y solo se valida uno por [prueba unitaria](https://blog.cincuentapalabras.co/prueba-unitaria).

```ts
/** Interfaz que define una dependencia externa */
interface IRegistrador {
  registrarInfo(info: string);
}

/** Implementación real de la interfaz IRegistrador */
class RegistradorReal implements IRegistrador {
  public registrarInfo(info: string) {
    console.log(info);
  }
}

/** Implementacióon Mock para verificar que
 * Calculadora.add está registrando correctamente */
class RegistradorMock implements IRegistrador {
  /** Campo privado para guardar la última información registrada */
  private informacionRecibidaParaRegistrar: string;

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

  /** Permite el acceso para validar la última información recibida */
  public get informacionRecibida(): string {
    return this.informacionRecibidaParaRegistrar;
  }
}

class Calculadora {
  /** Constructor que recibe la implementación de IRegistrador */
  constructor(private registrador: IRegistrador) {}

  public sumar(sumando: number, otroSumando: number): number {
    /** Usa la implementación de IRegistrador recibida para registrar
     * la información relacionada a la suma*/
    this.registrador.registrarInfo(`Sumará ${sumando} y ${otroSumando}`);
    return sumando + otroSumando;
  }
}

/** Inicio de la prueba */

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

/** Valida que la información registrada es la que se espera */
registradorMock.informacionRecibida === "Sumará 4 y 5";

/** Fin de la prueba */
```

[🇺🇸 English version](https://blog.fiftywords.co/mock)
