Explain System.runAs()
Generally, all Apex code runs
in system mode, and the permissions and record sharing of the current user are
not taken into account. The system method, System.runAs(), lets you write test
methods that change user contexts to either an existing user or a new user. All
of that user’s record sharing is then enforced. You can only use runAs in a
test method. The original system context is started again after all runAs()
test methods complete.
Example :
System.runAs(u) {
// The following code runs as
user 'u'
System.debug('Current User: '
+ UserInfo.getUserName());
System.debug('Current
Profile: ' + UserInfo.getProfileId()); }
// Run some code that checks
record sharing
}
Generally,
all Apex code runs in system mode, where the permissions and record sharing
of the current user are not taken into account. The system method runAs enables you to write test methods that change the user context to
an existing user or a new user so that the user’s record sharing is enforced.
The runAs method doesn’t enforce user
permissions or field-level permissions, only record sharing.
You can use runAs only in test methods. The original system context is started again
after all runAs test methods complete.
The runAs method ignores user license limits. You can create new users with runAs even if your organization has no additional user licenses.
In the
following example, a new test user is created, then code is run as that user,
with that user's record sharing access:
@isTest
private class TestRunAs {
public static testMethod void testRunAs() {
// Setup test data
// This code runs as the system user
Profile p = [SELECT Id FROM Profile WHERE
Name='Standard User'];
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='standarduser@testorg.com');
System.runAs(u) {
// The following code runs as user 'u'
System.debug('Current User: ' +
UserInfo.getUserName());
System.debug('Current Profile: ' +
UserInfo.getProfileId());
}
}
}
No comments:
Post a Comment