2017-07-25 9 views
0

私はサードパーティのURLにhttpコールアウトを行うために将来のクラスを呼び出すトリガーを作成しましたが、ここではうまくいきますが、テストクラスは機会フィールドをカバーしていませんIsWon &閉じています。このトリガーのコードカバレッジを少なくとも75%にするには、テストクラスでどのような変更が必要ですか。将来の方法とトリガの機会に頂点トリガーのテストクラスを書く方法

// Apexトリガ

trigger oppTrigger on Opportunity (before update) { 

String oppType = ''; 
for(Opportunity opp : Trigger.new){ 

if (opp.IsClosed == true){ // closed 
    if (opp.IsWon == true){ 
    oppType = 'Won'; // closed-won 
    }else{ 
    oppType = 'Lost'; // closed-lost 
    } 
} else { // open 
     oppType = 'Open'; 
    } 
    // call a method with @future annotation 
    futureCls.srvcCallout(opp.id,opp.Amount,oppType); 
} 
} 

//将来のクラス私はこだわっているトリガの

global class futureCls { 
@future(callout=true) 
Public static void srvcCallout(String oppId, Decimal oppAmt, String oppType){ 

    // Create http request 
    HttpRequest req = new HttpRequest(); 
    req.setMethod('POST'); 
    req.setHeader('Content-Type', 'application/json;charset=UTF-8');  
    req.setEndpoint('https://www.testurl.com/salesforce/opp-change'+'?id='+oppId+'&amt='+oppAmt+'&stage='+oppType); 

    // create web service 
    Http http = new Http(); 
     try { 
     // Execute web service call here  
     HTTPResponse res = http.send(req); 
     // Debug messages 
     System.debug('RESPONSE:'+res.toString()); 
     System.debug('STATUS:'+res.getStatus()); 
     System.debug('STATUS_CODE:'+res.getStatusCode()); 
     System.debug('BODY:'+res.getBody()); 

     } catch(System.CalloutException e) { 
      // Exception handler 
      System.debug('Error connecting to Paperless..'); 
     } 
    } 
} 

// Testクラス: -

@isTest 
private class futureCls_Test { 

private static testMethod void srvcCallout_Test() {   

    Test.startTest(); 

    // Unit test to cover trigger update event 
    Opportunity opp = new Opportunity(Name='test opp', StageName='stage', Probability = 95, CloseDate=system.today()); 
    insert opp; 
    opp.Amount = 1000; 
    opp.StageName = 'Closed/Won'; 
    update opp; 

    // Assign some test values 
    String oppId = '1sf2sfs2'; 
    Decimal oppAmt = 4433.43; 
    String oppType = 'Won'; 

    // Unit test to cover future method 
    futureCls.srvcCallout(oppId, oppAmt,oppType);  

    // Unit test to cover http web service 
    Test.setMock(HttpCalloutMock.class, new futureClsCalloutMock()); 
    Test.stopTest(); 

    } 
} 

答えて

1

あなたのテストクラスは、そのトリガーをすべて叩くために以下を行う必要があります:

注、これはそれを行うにはただ一つの方法です、あなたはそれを

  • をいくつかの異なる方法を行うことができ、「開く」
  • だいくつかの状態に機会を更新し、新たな機会
  • を作成します。新しい機会
  • 更新
  • は新しい機会に
  • 更新の機会に作成クローズ/ロストする機会を作成します。クローズ/ウォン

あなたは私に尋ねた場合は、機会を作成し、指定されたステータスにそれを更新TestDataFactory機能が役立つだろう:

@isTest 
public testOpportunityWithStatusChange(targetStatus){ 
    //do stuff here 
}; 

あなたはその後、すべての状況に一度その工場を呼び出すことができますトリガをカバーするためにテストクラス内でチェックしたかったのです。

+0

テストクラスを含めるように編集した場合は、トリガー内のif/elseステートメントで呼び出された各状態の機会作成と更新を繰り返すだけです。 – pburns1587

関連する問題