티스토리 뷰
1. Apex Unit Test란?
- 강력하고 오류가 없는 코드를 개발하기 위해 Apex는 Unit Test의 생성 및 실행을 지원한다.
- Unit Test는 특정 코드가 제대로 작동하는지 확인하는 클래스 메소드이다.
- Unit Test 메소드는 argument(인수)를 사용하지 않고 데이터베이스에 데이터를 커밋하지 않으며 메일을 보내지 않는다.
- 이러한 메소드는 @isTest가 클래스와 매소드에 달려있어야 한다.
- @isTest는 프로그램을 테스트하는데 사용되는 코드만 포함하는 클래스 및 메소드를 정의하는 주석이다.
- @isTest로 정의된 클래스는 최상위 클래스이어야 하며, 인터페이스나 열거형은 불가능하다.
@IsTest
private class myClass {
@IsTest
static void myTest() {
// code_block
} // myTest
} // end class
2. Unit Test 고려 사항
- Test 메소드는 Web Service Callout을 테스트하는데 사용할 수 없다.
- Web Service Callout을 Test하기 위해서는 MockCallout을 사용해야 한다.
- Test 메소드에서는 이베일 메세지를 보낼 수 없다.
- Test 메소드는 Test에서 생성된 데이터를 커밋하지 않기 때문에 완료된 후 Test 데이터를 삭제할 필요가 없다.
- testSetup 또는 test 메소드에서 test 클래스의 static member 변수 값을 변경하면 새 값이 유지되지 않는다.
- 그렇기에 같은 클래스의 다른 테스트 메소드는 정적 멤버 변수의 원래 값을 가져온다.
- 고유한 제약 조건이 있는 필드가 있는 일부 sObject의 경우 중복 sObject 레코드를 삽입하면 오류가 발생한다.
- Test 메소드로 관련 레코드를 수정할 때 Chatter 피드의 레코드(FeedTrackedChange 레코드)에 대한 추적된 변경 사항을 사용할 수 없다.
- FeedTrackedChange 레코드를 만들려면 해당 레코드와 연결된 상위 레코드를 변경한 후 데이터베이스에 커밋해야 된다.
- Test 메소드는 데이터를 커밋하지 않으므로 FeedTrackedChange 레코드가 생성되지 않는다.
- 마찬가지로 필드 내역 추적 레코드는 다른 sObject 레코드를 먼저 커밋해야 하므로 Test 메소드에서 만들 수 없다.
- 테스트에 DML이 포함된 경우 MAX_DML_ROWS 한계를 초과하지 않도록 해야 한다.
'[세일즈포스 개발자]' 카테고리의 다른 글
Salesforce Certified Platform Developer I - 오답정리 02 (0) | 2023.03.28 |
---|---|
Salesforce Certified Platform Developer I - 오답정리 01 (0) | 2023.03.08 |
Anonymous Blocks (0) | 2023.03.06 |
Salesforce Certified Platform Developer I – Dump Study 01 (0) | 2023.03.06 |
Permission set groups이란? (0) | 2023.03.03 |