Apex開發 -- 測試類

學習目的
0,爲什麼要寫測試類
1,測試類的註解
2,測試類裏獲取Metadate的方式
3,測試類編寫技巧
4,Batch Class測試類編寫
5,Call Out Class測試類編寫

爲什麼要寫測試類

Salesforce有一個機制,就是從沙盒環境部署到生產環境,測試類對業務邏輯代碼的覆蓋率必須大於等於75%。當然,如果要說還有其他的寫測試類的必要,那就是爲了做單元測試,規範,規範,規範。

測試類的註解

@isTest : 在每個測試類的類名/方法上要寫一個註釋,聲明這個類是測試類/測試方法

@isTest
private class testClass {
	@isTest
	static void testMethod(){
	}
}

@testSetup:測試數據準備,可以在準備臨時的測試數據。在這裏面的測試數據可以在測試方法裏面使用soql查詢出來

 @testSetup
  static void  testMethod() {
  }

測試類裏獲取Metadate的方式

1,獲取Price book

Test.getStandardPricebookId();//獲取標準價格手冊的Id

2,獲得記錄類型的Id
因爲記錄類型屬於Metadata類型,可以通過Soql獲取

SELECT Id FROM RecordType WHERE DeveloperName =' 記錄類型DeveloperName '

可以通過Schema空間的的API獲取

Schema.SObjectType.Opportunity.getRecordTypeInfosByName().get('記錄類型名').getRecordTypeId();

編寫技巧

1,指定用戶執行測試類,能夠解決記錄Owner的問題,解決query 101異常

System.runAs(想要指定的用戶) {
	
}

2,異步執行測試類Test.startTest() — Test.stopTest()一個測試方法裏面只能使用一次

Test.startTest();
需要測試的方法 //這裏面執行,能夠把前面使用的資源次數歸0。比如query次數等。相當於新的一個事務
Test.stopTest();

3,爲了保證每個方法的功能單一性,最好保證每個方法的入參都能用清晰的方式,這樣寫測試類可以減少很多問題

Batch Class測試類編寫

Apex_BatchName  a = new Apex_BatchName  (參數1,參數......);
Database.executeBatch(a);

Call Out Class測試類編寫

@isTest
private class xxxxxTest {
    private class RestMock implements HttpCalloutMock {
        public HTTPResponse respond(HTTPRequest req) {
            String fullJson = '{xxxxxxx}';//模擬請求成功返回的Json
            HTTPResponse res = new HTTPResponse();
            res.setHeader('Content-Type', 'text/json');
            res.setBody(fullJson);
            res.setStatusCode(200);
            return res;
        }
    }
    @testSetup
    static void dataPrepare() {
        User usr //新建一個符合測試場景的User,比如指定某個Profile的用戶執行
        RecordType oppRecordType = [SELECT Id FROM RecordType WHERE DeveloperName = '' LIMIT 1];//獲取記錄類型
        System.runAs(usr) {
           
        }
    }
    static testMethod void testmethod() {
        Test.startTest();
        Test.setMock(HttpCalloutMock.class, new RestMock());
        xxxxx類名.方法名
        Test.stopTest();
    }
}

如果有錯,請及時支持。一起學習,一起進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章