Salesforce:web服务调用的APEX测试类

Salesforce:web服务调用的APEX测试类,salesforce,apex,salesforce-lightning,restapi,callouts,Salesforce,Apex,Salesforce Lightning,Restapi,Callouts,我一直在试图找出web服务调用的测试类。我有四门不同的课API_成员,其中包含所有参数以及所有信息和字段匹配。我有一个API\u响应类,还有一个AccountTrigger和AccountTriggerHandler 在AccountTriggerHandler中,整个HTTPRequest和callout在调用API\u成员类的地方进行处理,然后从AccountTrigger触发它 现在的困难是测试类,因为我不是一个有经验的开发人员 我将如何处理这段代码的测试类(如果它是一些重要信息,我已经做

我一直在试图找出web服务调用的测试类。我有四门不同的课<代码>API_成员,其中包含所有参数以及所有信息和字段匹配。我有一个
API\u响应
类,还有一个
AccountTrigger
AccountTriggerHandler

AccountTriggerHandler
中,整个HTTPRequest和callout在调用
API\u成员
类的地方进行处理,然后从
AccountTrigger
触发它

现在的困难是测试类,因为我不是一个有经验的开发人员

我将如何处理这段代码的测试类(如果它是一些重要信息,我已经做了更改)

public与共享类AccountTriggerHandler{
public void isAfterInsert(列表accountNew){
对于(账户a:账户新){
发送数据(a.Id);
}
}
public void isAfterUpdate(列表accountNew){
}
@未来(callout=true)
公共静态void sendData(字符串accountId){
API_成员API=新的API_成员(accountId);
api.setupData();
API_Member.Data=API.dataList;
字符串json=json.serialize(数据);
system.debug('JSON'+JSON);
Http=newhttp();
HttpRequest请求=新建HttpRequest();
字符串url='0http://api.XXXXXXXXXXXXXXXXXXXXXXX';
字符串用户名='Ext-xxxxxxxxxxxxx-xxxxxxxxxxxxx';
字符串密码='xxxxxxxxxxxxxxxxxxxxxxxx';
Blob headerValue=Blob.valueOf(用户名+':'+密码);
字符串authorizationHeader='Basic'+EncodingUtil.base64Encode(headerValue);
request.setHeader('Authorization',authorizationHeader);
setHeader('Content-Type','application/json;charset=UTF-8');
setEndpoint(url);
request.setMethod('POST');
setBody(json);
HttpResponse response=http.send(请求);
if(response.getStatusCode()==201 | | response.getStatusCode()==200){
API_Response responsetrl=(API_Response)System.JSON.deserialize(Response.getBody(),API_Response.class);
列表m=响应trl.Meta;
System.debug('recordID='+m[0].recordID);
setResponse(m[0].recordID,response.getStatus());
}
}
}
这里是API_成员类

public class API_Member {
    public Data dataList;
    public Account input;
    public Contact c;
    public class Data {
        public list<Info> data;
    }
    public class Info {
            public String active;
            public String address_city;
            public String address_country;
            public String address_line_1;
            public String address_line_2;
            public String address_state;
            public String address_zipcode;
            public String company_name;
            public String date_end;
            public String date_paid;
            public String date_start;
            public String email;
            public String membership_number;
            public String mobile;
            public String org_number;
            public String person_first_name;
            public String person_last_name;
            public String person_number;
            public String phone;
            public String status;
            public String web_address;
    }

    public API_Member(string accountId) {
        this.input = getAccount(accountId);
        this.c = getContact();
    }

    public void setupData(){
        dataList = new Data();
        Info data = new Info();
        data.active = 'true'; //To be verified
        data.address_city = input.Ort__c;
        data.address_country = '';
        data.address_line_1 = input.Adress1__c;
        data.address_line_2 = '';
        //data.address_state = input.L_n_Namn__c;
        data.address_zipcode = input.Postnummer__c;
        data.company_name = input.Name;
        data.date_end = input.Expiry_Date__c != null ? string.valueOf(input.Expiry_Date__c) : '';
        data.date_paid = input.Last_Renew__c != null ? string.valueOf(input.Last_Renew__c) : '';
        data.date_start = input.Last_Renew__c != null ? string.valueOf(input.Last_Renew__c): '';
        data.email = input.Medlems_Epost__c;
        data.membership_number = input.AccountNumber;
        data.mobile = input.Phone;
        data.org_number = input.Organisationsnummer__c;
        data.person_first_name = c != null ? c.FirstName : '';
        data.person_last_name = c != null ? c.LastName : '';
        data.person_number = c != null ? c.Personnummer__c : '';
        data.phone = input.Phone;
        data.status = input.Status_Pay__c;
        data.web_address = input.Website;

        dataList.data = new list<Info>{data};
    }

    public Contact getContact(){
        list<Contact> c = [ SELECT Id,
                            Personnummer__c,
                            LastName,
                            FirstName
                            FROM Contact
                            WHERE AccountId =: input.Id
                            ORDER BY CreatedDate
                            ASC
                            LIMIT 1
        ];
        if(c.size() > 0){
            return c[0];
        }
        return null;
    }

    public Account getAccount(string accountId){
        Account a = [SELECT Id,
                    Ort__c,
                    Adress1__c,
                    Postnummer__c,
                    Name,
                    Expiry_Date__c,
                    Last_Renew__c,
                    Medlems_Epost__c,
                    AccountNumber,
                    Phone,
                    Organisationsnummer__c,
                    Status_Pay__c,
                    F_RecordId__c,
                    F_Satus__c,
                    Website
                    FROM Account
                    WHERE Id =: accountId
                    LIMIT 1
        ];
        return a;
    }
    
    public void setResponse(string recordId, string Status) {
        input.F_RecordId__c  = recordId;
        input.F_Satus__c  = status;
        update input;
    }
}
public class API_Response {

    public class Meta {
        public String recordID {get;set;} 
        public String href {get;set;} 
    }
    
    public List<Meta> meta {get;set;} 
    public List<Data> data {get;set;} 
    public Info info {get;set;} 
    public List<MetaField> metaField {get;set;} 
    
    public class MetaField {
        public String name {get;set;} 
        public Integer autoEntered {get;set;} 
        public Integer global_Z {get;set;} // in json: global
        public Integer maxRepeat {get;set;} 
        public String resultType {get;set;}         
    }
    
    public class Data {
        public String address_city {get;set;} 
        public String address_country {get;set;} 
        public String address_line_1 {get;set;} 
        public String address_line_2 {get;set;} 
        public String address_state {get;set;} 
        public String address_zipcode {get;set;} 
        public String company_name {get;set;} 
        public String date_end {get;set;} 
        public String date_start {get;set;} 
        public String email {get;set;} 
        public String membership_number {get;set;} 
        public String mobile {get;set;} 
        public String org_number {get;set;} 
        public String person_first_name {get;set;} 
        public String person_last_name {get;set;} 
        public String person_number {get;set;} 
        public String phone {get;set;} 
        public String status {get;set;} 
        public String upload_data_status {get;set;} 
        public String web_address {get;set;} 

    }
    
    public class Info {
        public String X_RESTfm_Version {get;set;} // in json: X-RESTfm-Version
        public String X_RESTfm_Protocol {get;set;} // in json: X-RESTfm-Protocol
        public Integer X_RESTfm_Status {get;set;} // in json: X-RESTfm-Status
        public String X_RESTfm_Reason {get;set;} // in json: X-RESTfm-Reason
        public String X_RESTfm_Method {get;set;} // in json: X-RESTfm-Method
        public String X_RESTfm_PHP_memory_limit {get;set;} // in json: X-RESTfm-PHP-memory_limit
        public String X_RESTfm_PHP_post_max_size {get;set;} // in json: X-RESTfm-PHP-post_max_size

    }
    
}
公共类API\u成员{
公共数据列表;
公共账户投入;
公众联络中心;
公共类数据{
公开名单数据;
}
公共类信息{
公共字符串处于活动状态;
城市公共字符串地址;
国家公共字符串地址;
公共字符串地址_行_1;
公共字符串地址第2行;
公共字符串地址_状态;
公共字符串地址_zipcode;
公开字符串公司名称;
公共字符串日期\结束;
公共字符串日期_支付;
公共字符串日期\开始;
公共字符串电子邮件;
公共字符串成员身份号码;
公共移动电话;
公共字符串组织单元号;
公共字符串人名;
公共字符串person\u last\u name;
公共字符串人名;
公用串电话;
公共字符串状态;
公共字符串网址;
}
公共API_成员(字符串accountId){
this.input=getAccount(accountId);
this.c=getContact();
}
公共数据(){
dataList=新数据();
信息数据=新信息();
data.active='true';//待验证
data.address\u city=input.Ort\u c;
data.address_country='';
data.address\u line\u 1=input.address1\u c;
data.address_line_2='';
//data.address\u state=input.L\u n\u nam\u c;
data.address\u zipcode=input.Postnummer\uu\c;
data.company_name=输入.name;
data.date\u end=input.expiration\u date\u c!=null?string.valueOf(input.expiration\u date\u c):“”;
data.date_paid=input.Last_Renew_c!=null?string.valueOf(input.Last_Renew_c):“”;
data.date_start=input.Last_Renew_c!=null?string.valueOf(input.Last_Renew_c):“”;
data.email=input.Medlems\u Epost\u\c;
data.membership\u number=input.AccountNumber;
data.mobile=input.Phone;
data.org\u number=input.organizationsnummer\uu c;
data.person\u first\u name=c!=null?c.FirstName:“”;
data.person\u last\u name=c!=null?c.LastName:“”;
data.person\u number=c!=null?c.personnumer\uu c:“”;
data.phone=input.phone;
data.status=input.status\u Pay\u c;
data.web_address=input.Website;
dataList.data=新列表{data};
}
公共联系人getContact(){
列表c=[选择Id,
人事部,
姓,
名字
从接触
其中AccountId=:input.Id
按CreatedDate排序
ASC
限制1
];
如果(c.size()>0){
返回c[0];
}
返回null;
}
公共帐户getAccount(字符串accountId){
帐户a=[选择Id,
奥图克,
地址1_uc,
发帖人,
名称
到期日,
最后更新,
问题,
帐号,
电话,
组织机构,
状态支付,
F_RecordId_uuc,
F_Satus___c,
网站
从帐户
public class API_Response {

    public class Meta {
        public String recordID {get;set;} 
        public String href {get;set;} 
    }
    
    public List<Meta> meta {get;set;} 
    public List<Data> data {get;set;} 
    public Info info {get;set;} 
    public List<MetaField> metaField {get;set;} 
    
    public class MetaField {
        public String name {get;set;} 
        public Integer autoEntered {get;set;} 
        public Integer global_Z {get;set;} // in json: global
        public Integer maxRepeat {get;set;} 
        public String resultType {get;set;}         
    }
    
    public class Data {
        public String address_city {get;set;} 
        public String address_country {get;set;} 
        public String address_line_1 {get;set;} 
        public String address_line_2 {get;set;} 
        public String address_state {get;set;} 
        public String address_zipcode {get;set;} 
        public String company_name {get;set;} 
        public String date_end {get;set;} 
        public String date_start {get;set;} 
        public String email {get;set;} 
        public String membership_number {get;set;} 
        public String mobile {get;set;} 
        public String org_number {get;set;} 
        public String person_first_name {get;set;} 
        public String person_last_name {get;set;} 
        public String person_number {get;set;} 
        public String phone {get;set;} 
        public String status {get;set;} 
        public String upload_data_status {get;set;} 
        public String web_address {get;set;} 

    }
    
    public class Info {
        public String X_RESTfm_Version {get;set;} // in json: X-RESTfm-Version
        public String X_RESTfm_Protocol {get;set;} // in json: X-RESTfm-Protocol
        public Integer X_RESTfm_Status {get;set;} // in json: X-RESTfm-Status
        public String X_RESTfm_Reason {get;set;} // in json: X-RESTfm-Reason
        public String X_RESTfm_Method {get;set;} // in json: X-RESTfm-Method
        public String X_RESTfm_PHP_memory_limit {get;set;} // in json: X-RESTfm-PHP-memory_limit
        public String X_RESTfm_PHP_post_max_size {get;set;} // in json: X-RESTfm-PHP-post_max_size

    }
    
}
@isTest
public class API_ResponseMock implements HttpCalloutMock {
    public HTTPResponse respond(HTTPRequest request) {
        // Create a fake response
        HttpResponse response = new HttpResponse();
        response.setHeader('Content-Type', 'application/json');
        response.setBody('if you have sample JSON document that the service would return - paste it here. You must have something you used as the JSON2Apex input?');
        response.setStatusCode(200);
        return response;
    }
@isTest
static void testCallout() {
    // Set mock callout class 
    Test.setMock(HttpCalloutMock.class, new API_ResponseMock());
    Test.startTest();
    insert new Account(Name = 'unit test'); // put whatever required fields you have
    Test.stopTest(); // @future's don't run until this line.

    // hm, what now? You have anything to "assert"? Will this callout be updating account maybe? Setting a Task with status=Completed, anything you can check?
}