Edited at

ユーザを作成するテストコードでは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は重複しないようにする必要があるようなので、自組織のドメイン等を指定するのが良さそうです。