2016-09-17 90 views
0

我有一個頂點類A.我從A範圍內調用B類的功能。如何從第一類(APEX類測試/ salesforce測試)中測試第二類func調用的http調用

class A {

B bobj = new B(); B.function2();

function1(); //類內的

}

此功能1和功能2的HTTP調用2個DIFF休息服務。

我爲函數1和函數2編寫了一個帶有httpcallmockouts的測試類。所以在APex測試類裏面的順序是這樣的 -

B objB = new B();

HttpResponse res = CalloutB.getInfoFromExternalService();

A objA = new A(); HttpResponse res = CalloutA.getInfoFromExternalService();

//直到此時我測試運行成功的HTTP調用模擬

Test.startTest();

objA.function1();

//這裏我得到一個錯誤http callout不支持B類的function2的測試方法。

//如果我改變上述爲了

//甲objA =新的A();

// HttpResponse res = CalloutA.getInfoFromExternalService();

// B objB = new B();

// HttpResponse res = CalloutB.getInfoFromExternalService();

//然後我得到錯誤http callout不支持A類的function1的測試方法。

Test.stopTest();

那麼,如何測試第一個類中另一個類的函數調用中的http調用。

回答

1

發生這種情況是因爲您沒有初始化httpMock類對象,所以您的測試類嘗試擊中不允許來自測試類的真實Web服務調用。你需要做初始化你mockClass對象,並使用它,而不是返回數據,而不是打真正的Web服務端點

在主類,它不標註申報持有 參考創建mockClass對象

變量

在您的標註類中添加一個條件,檢查它是否使用Test.isRunningTest()正在運行的測試類。

如果它是一個測試類,然後用你的模擬類返回,而不是真正的標註

如果它不是一個測試類執行上下文,使用真實標註

@isTest 
global class ResultHttpMock implements HttpCalloutMock { 

    global HTTPResponse respond(HTTPRequest req) { 

    HttpResponse res; 
    System.debug('request inside mock '+req); 
    if(req != null) { 

     res = new HttpResponse(); 
     res.setHeader('Content-Type', 'application/json'); 
     res.setBody(getBody()); 
     res.setStatusCode(200); 
     res.setStatus('OK'); 

    } 

    return res; 
} 

    private static String getBody() { 
    String idmJsonMockResponse = '{"ednaScoreCard":{"sc":[],"etr":[{"test":"id:0","details":"false","ts":1471432074763,"stage":"1"},{"test":"ed:37","fired":false,"details":"ed:37(false) = true","ts":1471432074763,"stage":"1"} 
} 

數據在你的A級和B類,請參考ResultHttpMock

global class HttpCalloutClass { 

public static HttpCalloutMock httpMock = null; 
    ...... 
    if(Test.istestRunning() && httpMock != null) { 
     Http response = httpMock.respond(request); 
    } else { 
     Http response = http.send(request); 
    } 
} 

在您的測試類中,請先初始化httpMock對象調用functionA()和functionB()

@isTest(seeAllData=false) 
public class TestHttp { 

    static testMethod void testfunctionA() { 

    Test.startTest(); 

    HttpCalloutClass.httpMock = new ResultHttpMock(); 
    String result = HttpCalloutClass.functionA(); 

    Test.stopTest(); 
} 
+0

謝謝。 if(Test.istestRunning()&& httpMock!= null)。這很好。 –

+0

很高興它的工作。 – Cyclotron3x3

相關問題