티스토리 뷰

[세일즈포스 개발자]

Apex Unit Test

monimoni 2023. 3. 6. 15:18

 

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 한계를 초과하지 않도록 해야 한다.

 

 

 

728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항