The error is:

System.DmlException: Insert failed. First exception on row 0; first error: DUPLICATE_USERNAME, Duplicate Username.
The username already exists in this or another Salesforce organization. Usernames must be unique across all Salesforce organizations. To resolve, use a different username (it doesn't need to match the user's email address). : [Username] Class.testForActivityTrigger.testRunAs: line 11, column 1

Public class testForActivityTrigger{
    public static testMethod void testRunAs() {
        Profile p = [SELECT Id FROM Profile WHERE Name='BLP_NA'];

        User u = new User(Alias = 'standt', Email='standarduser@testorg.com', 
            EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US', 
            LocaleSidKey='en_US', ProfileId = p.Id, 
            TimeZoneSidKey='America/Los_Angeles', UserName='test@testorg.com');

            Account acct = new Account(Name = 'Apex Test');
            insert acct;

            Task tsk1 = new Task(WhatId = acct.Id, Subject = 'Email: apex test', ActivityDate = date.today(), Status = 'Completed');
            insert tsk1;

            Property__c objProperty = new Property__c(name = 'Apex Test');
            insert objProperty;

            Property_Relation__c objPropRelation = new Property_Relation__c(Property__c = objProperty.id , Account__c =acct.Id );
            insert objPropRelation ;
  • At which line and what is the exact error message?
    – Keith C
    Aug 5 '16 at 11:27
  • 4
    Let me guess... duplicate username.
    – Adrian Larson
    Aug 5 '16 at 11:28

The Username field is unique across all orgs. Try using a value less likely to collide. Something like testUser+asdfghjkl@example.com.1234ABCD. You can randomize it more by adding static counters, Math.random, etc. Here are a couple options for your one-off case.

'testUser+asdfghjkl@example.com.' + Math.random()
'testUser+asdfghjkl@example.com.' + Datetime.now().getTime()

A refresher from the documentation for those who may have forgotten or not seen it:

The runAs method implicitly inserts the user that is passed in as parameter if the user has been instantiated, but not inserted yet.

  • 3
    Yes, We need to make username unique across all orgs. One way is to use getTime() method. Then username could be written as UserName=System.now().getTime()+'systemadmin@testorg.com'. The getTime() method Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this DateTime object
    – Devendra
    Aug 5 '16 at 12:34
  • @Devendra yes there are many workable approaches.
    – Adrian Larson
    Aug 5 '16 at 12:36
  • @AdrianLarson Yes, you are correct :). There are many ways to make the unique username. This is the one I generally use.
    – Devendra
    Aug 5 '16 at 12:38
  • Added a few concrete examples. It's more reliable than random, probably.
    – Adrian Larson
    Aug 5 '16 at 12:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.