Mocks para callouts
Un test no puede llamar a un sistema externo: fallaría. Para probar el código que lo hace, le das una respuesta de mentira, un mock, y compruebas qué hace tu código con ella.
✓ En esta sub-lección
- 01Escribir un HttpCalloutMock que devuelva una respuesta preparada.
- 02Registrarlo con Test.setMock antes de que el código llame fuera.
- 03Probar qué hace tu código con la respuesta.
La nutria: ¿Te acuerdas? · Repaso de la lección 5
¿Para qué sirve Assert.fail justo después de la llamada, dentro del try?
ErpSyncJob, el Queueable del Módulo 9, llama al ERP y después marca las renovaciones como enviadas. Si lo ejecutas en un test tal cual, falla: los métodos de test no pueden hacer callouts. Y aunque pudieran, no querrías que cada despliegue mandara renovaciones de prueba al ERP de verdad.
Un ERP de mentira
private class ErpOkMock implements HttpCalloutMock {
public HttpResponse respond(HttpRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
res.setBody('{"received": true}');
return res;
}
}
Test.setMock(HttpCalloutMock.class, new ErpOkMock()); // desde aquí, cada callout lo contesta el mockCon Test.setMock, cuando el código ejecuta http.send(req), no sale nada de Salesforce: el contesta. Así pruebas lo que de verdad es tuyo, qué haces con la respuesta. Y puedes tener varios mocks: uno que responde 200, otro que responde 500 y otro que lanza una CalloutException, para probar también qué pasa cuando el ERP falla.
La nutria: Tu usuario de prueba, pero para sistemas
La nutria: ¿Y por qué no un Flow? Porque el callout vive donde Flow no prueba