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