學習目的
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();
}
}
如果有錯,請及時支持。一起學習,一起進步!