💬

[Salesforce] Apex RESTを単体テストする

2021/09/22に公開

単体テスト - Unit Test

Sandbox環境でApexでREST APIを実装しても単体テストを書いておかないと本番に持っていけないですよね。

テスト対象のコントローラーの実装は省略します。
SampleControllerに@HttpPostのアノテーションがついているdoPostというSampleCustomObject__cのStatus__cが更新される処理を実装しているとしましょう。
するとテストは以下のようになります。

@isTest
public class TestSampleController {

  private static SampleCustomObject__c createSample() {

    SampleCustomObject__c sample = new SampleCustomObject__c();
    sample.FirstName__c = 'Taro';
    sample.LastName__c = 'Test';
    sample.Status__c = 'Init';
    insert sample;

    return sample;
  }

  @isTest static void testPostOK() {

    SampleCustomObject__c sample = createSample();

    // Set up test request
    RestRequest request = new RestRequest();
    request.httpMethod = 'POST';
    RestContext.request = request;
    Map < String, String > body = new Map < String, String > ();
    body.put('Id', sample.Id);
    RestContext.request.requestBody = Blob.valueOf(JSON.serialize(body));

    // Call the method to test
    SampleCustomObject__c res = SampleController.doPost();

    // Verify results
    System.assertEquals('Processed', res.Status__c);
  }
}

Discussion