Salesforce
Apex

ユーザを作成するテストコードではUserNameに注意

More than 1 year has passed since last update.

概要

  • test@example.com ユーザを作成するテストコードがありました
  • SandboxでのテストはPassしていました
  • 本番リリース時にテストコードがエラーになってしまい、リリースできませんでした(泣

再現用テストコード

@isTest
private class UserAddTest {
    @isTest static void useradd() {
        // get profile
        List<Profile> profiles = [SELECT Id FROM Profile WHERE Name IN ('Standard User', '標準ユーザ')];
        System.assert(profiles.size() > 0);

        // insert test user
        insert new User(
            UserName = 'test@exapmle.com',
            Email = 'test@example.com',
            LastName = 'test',
            Alias = 'test',
            TimeZoneSidKey = 'Asia/Tokyo',
            LocaleSidKey = 'ja_JP',
            EmailEncodingKey = 'ISO-2022-JP',
            LanguageLocaleKey = 'ja',
            ProfileId = profiles.get(0).Id
       );
    }
}

事象

  • Sandboxでテスト実行した場合はPass
  • 本番リリース時のテストで下記エラー(適当に改行しています)
System.DmlException: Insert failed. First exception on row 0;
first error: DUPLICATE_USERNAME, ユーザ名がすでに登録されています。<br>
この Salesforce 組織または別の Salesforce 組織に、ユーザ名がすでに存在します。
ユーザ名は、すべての Salesforce 組織で一意である必要があります。
解決するには、異なるユーザ名を使用します (ユーザのメールアドレスと一致する必要はありません)。 : [Username] 

解決方法

  • UserNameは、(他の企業が利用している組織も含めて)Salesforce組織全体で一意である必要がある、と理解しました
  • Sandboxでエラーにならないのは、インスタンスごとに一意ということなのでしょうか。
  • とにかく、テストコードであっても、UserNameは重複しないようにする必要があるようなので、自組織のドメイン等を指定するのが良さそうです。