Apex setReadOnlyApplicationModeでアプリケーションモードを参照のみに設定する

環境
Salesfoce

構文
public static Void setReadOnlyApplicationMode(Boolean applicationMode)
Salesforce のアップグレードおよびダウンタイム中に参照のみモードをシミュレートするには、Apex テストにおける組織のアプリケーションモードを参照のみに設定します。アプリケーションモードは、Apex テストの各実行が終了するとデフォルトのモードにリセットされます。

使用例
アプリケーションモードを参照のみに設定し、新しい取引先レコードを挿入しようとしています。
結果は例外となります。
その後、アプリケーションモードはリセットされ、正しく挿入されます。

サンプルコード

@isTest
private class ApplicationReadOnlyModeTestClass {
  public static testmethod void test() {
    // テストアカウントを作成
    Account testAccount = new Account(Name = 'TestAccount');
    insert testAccount;

    // アプリケーションの読み取り専用モードを設定.
    Test.setReadOnlyApplicationMode(true);

    // 読み取り専用モードを確認
    System.assertEquals(
               ApplicationReadWriteMode.READ_ONLY, 
               System.getApplicationReadWriteMode());

    // アカウントオブジェクトの作成
    Account testAccount2 = new Account(Name = 'TestAccount2');

    try {
      // テストアカウントを取得
      Account testAccountFromDb = 
        [SELECT Id, Name FROM Account WHERE Name = 'TestAccount'];
      System.assertEquals(testAccount.Id, testAccountFromDb.Id);

      //InvalidReadOnlyUserDmlException例外 
      insert testAccount2;      
      System.assertEquals(false, true);
    } catch (System.InvalidReadOnlyUserDmlException e) {
      // Expected
    }        
    // 読み取り専用アプリケーション モード
    Test.setReadOnlyApplicationMode(false);

    insert testAccount2;
    Account testAccount2FromDb = 
       [SELECT Id, Name FROM Account WHERE Name = 'TestAccount2'];
    System.assertEquals(testAccount2.Id, testAccount2FromDb.Id);
  }
}

 

IT

Posted by arkgame