Apex 테스트 클래스
16217 단어 ApexSalesforce테스트
클래스 정의
SeeAllData=true로 하면 기존의 데이터를 참조할 수 있게 되지만, 통상은 false로 한다(ConnectAPI라든지 일부의 기능은 true가 아니면 실행할 수 없기 때문에 주의)
@isTest(SeeAllData=false)
private class Ron_xxxControllerTest {
@isTest
static void runProperties() {
//testMethod の仕様は非推奨になっているため使わない。@isTestを使う
public static testMethod void testXXX(){
테스트 방법의 병아리
/*
* target function:
*/
@isTest
static void testXX() {
//prepare user
User u1 = TestUtil.createUser('test1');
//execute and assert
System.runAs(u1){
//prepare test data
//execute test
Test.startTest();
System.assertEquals(expected, actual);
Test.stopTest();
}
}
assert
System.assertEquals(期待値, 実際の値);
System.assert(評価の式);
테스트용 GET 파라미터 설정
ApexPages.currentPage().getParameters().put('xxxItemId', '');
start/end
start와 stop를 세트로 사용하는 것. start와 stop 사이에서만 거버너 제한이 카운트되고 데이터 준비를 위한 코드 실행분이 카운트되지 않는다.
Test.startTest();
・・・
Test.stopTest();
runAs
특정 사용자 컨텍스트 하에서 테스트를 수행한다.
User u1 = createTestUser();
System.runAs(u1){
・・・
}
맞춤 설정
SeeAllData = false 환경에서는 사용자 정의 설정에도 데이터가 설정되지 않습니다. 테스트 방법 내에서 데이터를 준비해야 함
public static xxx_Properties__c prepareCustomSettings(){
xxx_Properties__c settings = new xxx_Properties__c();
settings.Name = 'XXX';
settings.email = 'aaa@aaa.com';
insert settings;
return settings;
}
VF 확장 컨트롤러 테스트 StandardController
//StandardControllerをnewして、コントローラに渡す
XX__c instance = new XX__c();
instance.xx__c = '123';
Apexpages.Standardcontroller sc = new Apexpages.Standardcontroller(instance);
XX_VF_Ctrl contl = new XX_VF_Ctrl(sc);
트리거의 Validation 체크 테스트 (addError ()를 사용하는 경우)
try{
insert c1; //error
System.assert(false); //例外が発生すべき
}catch(DmlException e)
}
테스트 시 자동 번호 매기기 증가를 방지하는 옵션
[개발]-[Apex 테스트 실행]-[옵션]
'독립 자동 번호 매기기 순서' 확인
테스트 사용자 생성 코드
/*
* create a test user
* name: firstName
*/
public static User createUser(String name){
Profile profile = getStandardProfile();
String profileId = profile.id;
User user = new User();
user.Email = name + 'test@xx.xxx.com';
user.UserName = name + 'test@xx.xxx.com';
user.FirstName = name;
user.LastName = '123';
user.Alias = user.UserName.split('@')[0].left(8);
user.ProfileId = profileId;
//user.UserRoleId = role.Id;
user.EmailEncodingKey = 'ISO-2022-JP';
user.LanguageLocaleKey = 'ja';
user.LocaleSidKey = 'ja_JP';
user.TimeZoneSidKey = 'Asia/Tokyo';
insert user;
user = [select Name, UserName, FirstName, LastName, Alias, UserRoleId, ProfileId, CreatedDate from user where UserName = :user.Username limit 1];
return user;
}
/*
* get Profile of standard user
*/
public static Profile getStandardProfile(){
Profile[] profiles;
profiles = [select Id From Profile where Name = '標準ユーザ' limit 1];
if (profiles.isEmpty()){
profiles = [select Id From Profile where Name = 'Standard User' limit 1];
}
return profiles[0];
}
테스트 실행 시 개인 테스트에 액세스할 수 있도록 허용
@TestVisible
붙이기테스트 실행 시 특정 코드 블록을 실행하지 않도록 합니다.
if (!Test.isRunningTest()) {
....
}
MIXED_DML_EXCEPTION 해결 방법
User나 UserRole에 대한 DML과 그 이외의 객체에 대한 DML을 같은 트랜잭션으로 실행하고 있는 것이 이유.
설명
테스트 클래스에서 해결 방법은 System.runAs를 사용합니다.
//use System.runAs block in order to avoid MIXED_DML_EXCEPTION
User thisUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()];
System.runAs (thisUser){
....
}
Standard PriceBook ID를 얻는 방법
테스트 클래스에서 PricebookEntry()를 만들고 싶다면 아래의 숫자로 표준 가격표의 ID를 가져옵니다.
Id pricebookId = Test.getStandardPricebookId();
PricebookEntry pbe = new PricebookEntry();
pbe.Product2Id = someProduct.Id;
pbe.Pricebook2Id = pricebookId;
pbe.UnitPrice = 0;
pbe.IsActive = true;
insert pbe;
Reference
이 문제에 관하여(Apex 테스트 클래스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TaigerAndDragon/items/343dad5ed06fd538a711텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)