Saltar al contenido

Cómo crear una clase simulada para múltiples llamadas en una sola clase

Solución:

Esta necesidad se cubre en Prueba de llamadas de Apex usando HttpCalloutMock. Específicamente, vea el Prueba de múltiples llamadas HTTP sección. Este es el ejemplo que usan:

public class MultiRequestMock implements HttpCalloutMock {
    Map<String, HttpCalloutMock> requests;

    public MultiRequestMock(Map<String, HttpCalloutMock> requests) {
        this.requests = requests;
    }

    public HTTPResponse respond(HTTPRequest req) {
        HttpCalloutMock mock = requests.get(req.getEndpoint());
        if (mock != null) {
            return mock.respond(req);
        } else {
                throw new MyCustomException('HTTP callout not supported for test methods');
        }
    }

    public void addRequestMock(String url, HttpCalloutMock mock) {
        requests.put(url, mock);
    }
}

No estoy seguro de por qué no anotan la clase como @IsTest. Probablemente deberías.

Esta es quizás la forma más simple de un simulacro que se ocupa de múltiples solicitudes.

Se declara como una clase interna de la clase de prueba, por lo que la idea es que maneje todos los casos que maneja la clase de prueba externa. En el respond método, puede mirar el punto final de la solicitud o el cuerpo de la solicitud y usar la lógica if / else para devolver la respuesta falsa adecuada. (También puede agregar afirmaciones para verificar los detalles del cuerpo de la solicitud).

@IsTest
private class CalloutTest {

    private class Mock implements HttpCalloutMock {
        public HTTPResponse respond(HTTPRequest req) {
            if (req.getEndpoint().endsWith('abc')) {
                HTTPResponse res = new HTTPResponse();
                res.setBody('{}');
                res.setStatusCode(200);
                return res;
            } else if (req.getEndpoint().endsWith('xyz')) {
                ...
            } else {
                System.assert(false, 'unexpected endpoint ' + req.getEndpoint());
                return null;
            }
        }
    }

    @IsTest
    static void abc() {
        Test.setMock(HttpCalloutMock.class, new Mock());
        ...
    }

    @IsTest
    static void xyz() {
        Test.setMock(HttpCalloutMock.class, new Mock());
        ...
    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *