Salesforce Apex 测试简单 Webhook 的代码覆盖率问题

时间:2021-06-11 20:09:18

标签: testing salesforce apex

我是 Salesforce 的新手,一直在为一些 webhooks 编写测试 - 一个作为按钮,一个在机会创建时触发。

目标:通过 Webhook 测试(我已经在沙箱中手动测试了很多次,两个 Webhook 都可以工作)。

问题:是否有一个或两个非常简单的测试可以证明 webhook 可以工作,所以我可以通过它?

Apex Trigger 1:(按键触发)

trigger WebhookTrigger on CustomObject (after insert) {
  String url = 'https://webhook.sample.com';
  String content = Webhook.jsonContent(Trigger.new, Trigger.old);
  Webhook.callout(url, content);
}

Apex Trigger 2:(机会创造触发)

trigger opportunityCreatedTrigger on Opportunity (after insert) {
  String url = 'https://webhook.sample1.com';
  String content = Webhook.jsonContent(Trigger.new, Trigger.old);
  Webhook.callout(url, content);
}

Apex 类:Webhook:

public class Webhook implements HttpCalloutMock {
  public static HttpRequest request;
  public static HttpResponse response;
  public HTTPResponse respond(HTTPRequest req) {
    request = req;
    response = new HttpResponse();
    response.setStatusCode(200);
    return response;
  }
  public static String jsonContent(List<Object> triggerNew, List<Object> triggerOld) {
    String newObjects = '[]';
    if (triggerNew != null) {
        newObjects = JSON.serialize(triggerNew);
    }
    String oldObjects = '[]';
    if (triggerOld != null) {
        oldObjects = JSON.serialize(triggerOld);
    }
    String userId = JSON.serialize(UserInfo.getUserId());
    String content = '{"new": ' + newObjects + ', "old": ' + oldObjects + ', "userId": ' + userId + '}';
    return content;
  }

  @future(callout=true)
  public static void callout(String url, String content) {
    if (Test.isRunningTest()) {
        Test.setMock(HttpCalloutMock.class, new Webhook());
    }
    Http h = new Http();
    HttpRequest req = new HttpRequest();
    req.setEndpoint(url);
    req.setMethod('POST');
    req.setHeader('Content-Type', 'application/json');
    req.setBody(content);
    h.send(req);
}

}

0 个答案:

没有答案