Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Salesforce 模拟Web服务调用实现_Salesforce_Test Class - Fatal编程技术网

Salesforce 模拟Web服务调用实现

Salesforce 模拟Web服务调用实现,salesforce,test-class,Salesforce,Test Class,由于此错误,Salesforce中最近正在工作的测试类开始失败 定义为TestMethod的方法不支持Web服务调用 堆栈跟踪:空 我已经审阅了SF的回复 但不了解在测试类中在何处实现调用 我创建了一个模拟Webserivce类,但不知道在哪里调用该模拟类 这是失败的测试类: @isTest public class OppLineItemInventoryTriggerTest { static testmethod void testdemo() { Account

由于此错误,Salesforce中最近正在工作的测试类开始失败


定义为TestMethod的方法不支持Web服务调用 堆栈跟踪:空

我已经审阅了SF的回复

但不了解在测试类中在何处实现调用

我创建了一个模拟Webserivce类,但不知道在哪里调用该模拟类

这是失败的测试类:

@isTest
public class OppLineItemInventoryTriggerTest {
    static testmethod void testdemo() {
        Account act = new Account(lastName = 'Testing', Billingstreet = '1234 Main', billing_as_shipping__c = True, Business_Unit__c = 'Vaya');
        insert act;
        Product2 prod = TestUtils.createProduct('product1');
        Id RecordTypeIdopp = Schema.SObjectType.Opportunity.getRecordTypeInfosByName().get('Package Lot').getRecordTypeId();
        Opportunity opp = new Opportunity();
        opp.AccountId = act.ID;
        opp.Name = 'Test';
        opp.Status__c = 'Completed';
        opp.Transfer_Type__c = 'Delivery';
        opp.StageName = 'New';
        opp.recordtypeid = RecordTypeIdopp;
        opp.CloseDate = Date.newInstance(2016, 12, 9);
        insert opp;
        Dosage__c dos = new Dosage__c();
        dos.Product__c = prod.ID;
        dos.Unit__c = 'mg';
        dos.Value__c = 5;
        insert dos;
        Product_Lot__c prolo = new Product_Lot__c();
        insert prolo;
        String standardPricebookId = Test.getStandardPricebookId();
        PricebookEntry pdb = new PricebookEntry(Pricebook2Id = standardPricebookId, Product2Id = prod.Id, IsActive = true, UnitPrice = 100);
        insert pdb;
        Opportunity opps = [Select id from Opportunity Limit 1];
        Contact con = new Contact(LastName = 'TestName');
        insert con;
        OpportunityLineItem oli = new OpportunityLineItem(OpportunityId = opps.Id, PricebookEntryId = pdb.Id, Quantity = 10, Shipping_Datetime__c = NULL, TotalPrice = 3000);
        insert oli;
        Inventory__c inv = new Inventory__c();
        inv.Product_ID__c = prod.ID;
        inv.Status__c = 'Completed';
        inv.Opportunity__c = opp.ID;
        inv.Days__c = '30';
        inv.Prescription__c = 'www.google.com';
        inv.Prescription_Line_Item_Id__c = 'test';
        inv.Product_Lot__c = prolo.ID;
        inv.Purchase_Date__c = Date.newInstance(2016, 12, 9);
        insert inv;
        sObject[] sObjectOldList = new sObject[] {};
        sObject[] sObjectNewList = new sObject[] {};
        sObject s11,s12;
        //sObjectOldList.add(oli);
        //sObjectNewList.add(oli);
        OppLineItemInventoryTrigger s1 = new OppLineItemInventoryTrigger(sObjectOldList, sObjectNewList);
        //  s1.execute(sObjectOldList, true);
        s1.execute(sObjectNewList, true);
        s1.executable(s11, s12);
    }
我创建了这个模拟webservice类

global class YourHttpCalloutMockImpl implements HttpCalloutMock {
    global HTTPResponse respond(HTTPRequest req) {
        HttpResponse res = new HTTPResponse();
        res.setHeader('Content-Type', 'application/JSON');
        res.setBody('Your body');
        res.setStatusCode(201);
        return res;
    }
}

但是不确定如何在测试类中调用它。

您不需要在单元测试中显式调用模拟类。相反,您可以使用
Test.setMock()
调用来配置它,就像

Test.setMock(WebServiceMock.class, new YourHttpCalloutMockImpl ());
对于SOAP web服务,或

Test.setMock(HttpCalloutMock.class, new YourHttpCalloutMockImpl ());
确保在调用要测试的代码之前执行此调用,这将生成调用。系统将自动使用您的模拟类响应出站web服务调用-无需您进一步干预


现在,您似乎正在查看SOAP文档,但已经编写了一个-确保您采用的模拟接口与代码所做调用的类型相匹配。

定义为TestMethod的方法不支持Web服务调用堆栈跟踪:null

发生此错误是因为测试类中不允许web服务调用

要绕过详图索引,请添加HttpcalloutMock类

下面是一个示例测试类,其中包含绕过web服务调用的mock类

**********************测试班***************************

@isTest 
private class Test_class {

    private class RestMock implements HttpCalloutMock {

        public HTTPResponse respond(HTTPRequest req) {
            String fullJson = 'your Json Response';

            HTTPResponse res = new HTTPResponse();
            res.setHeader('Content-Type', 'text/json');
            res.setBody(fullJson);
            res.setStatusCode(200);
            return res;
        }
    }
    static testMethod void service_call() {

        Test.setMock(HttpCalloutMock.class, new RestMock());
        Test.startTest();

        //your web service call code

        Test.StopTest();


    }
}

模拟类将负责web服务调用。

感谢您的反馈David,我是一个尝试更新现有代码的新开发人员。所以我列出的测试类需要调用第一行?在本例中,我将在何处插入``Test.setMock(webservicecock.class,newyourtpCalloutMockImpl())```@kpedrick1所要做的就是在实际调用最终生成调用的代码之前调用。当我在第2行或第3行之后添加该行时,会出现语法错误。对不起,没有问题