2017-09-25 8 views
0

こんにちはみんなは次のとおりです。パワーモックを使用してリストタイプをパラメータとして使用しているプラ​​イベートメソッドをモックする方法はありますか?私は、パラメータとして、コードの詳細の一部をリスト形式を取っているプラ​​イベートメソッドを模擬しようとしています

CustomerVerificationクラス

public class CustomerVerification{ 

creditCheck.setSuffix(null); 
     String pinAndPreciseId = null; 
     try { 
      pinAndPreciseId = executeCreditCheck(creditCheck, errorResponses, transactionId); 
      if (pinAndPreciseId.contains("Error")) { 
       ErrorResponse errorResponse = new ErrorResponse("EXPERIAN", pinAndPreciseId, "E01", transactionId); 
       errorResponses.add(errorResponse); 
       customerVerification.setErrorResponses(errorResponses); 
       return customerVerification; 
      } 
     } catch (Exception e) { 
      throw new EnterpriseCustomerVerificationException(e.getMessage()); 
     } 

     } 

executeCriditCheckクラス

private String executeCreditCheck(CreditCheck creditCheck, List<ErrorResponse> errorResponses, String transactionId) 
      throws UnsupportedOperationException, IOException { 
     LOG.info("Calling experian"); 
     String pinAndPreciseId = null; 
     String request = null; 
     String referenceId = null; 
     DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
     Date today = new Date(); 
     referenceId = formatter.format(today); 

     HttpPost experianHttpPost = getExperianHttpPostMethod(); 
     NetConnectRequest netConnectRequest = ExperianCreditMapper.map(creditCheck, eai, dbHost, referenceId, 
       experianProduct, opInitials, preamble, subCode, arfVersion, venderNumber, vendorVersion, null, 
       CustomRRDashKeyword); 
     System.err.println("REQUEST -- " + netConnectRequest.toString()); 
     request = "NETCONNECT_TRANSACTION=" + URLEncoder.encode(netConnectRequest.toString()); 

     experianHttpPost.setEntity(new ByteArrayEntity(request.getBytes("UTF-8"))); 
     HttpResponse response = experianHttpClient.execute(experianHttpPost); 
     pinAndPreciseId = ExperianCreditMapper.getPIN(response); 
     return pinAndPreciseId; 
    } 

誰かが模擬方法についてのアイデアを教えてもらえますかプライベートメソッドexecuteCreditCheckこれは3つのパラメータのうち、1つがリスト型です。

注:ここでコードの一部を示します。いくつか1つは 私に与える方法についてのアイデアを与えるexecuteCreditCheckメソッド。

+0

)です。ここではスパイを使用して調べます。 B)基本的にテストするのは難しいコードです。それを何とかテストしなくても、むしろ後退してデザインを改善する方法を考えて、テストするのが簡単になります。 – GhostCat

答えて

1

プライベートメソッドをテストする天気に関する膨大な議論がありません。個人的に私は直接プライベートメソッドをテストしません。プライベートメソッドを呼び出すパブリックメソッドがあり、私が間違っているかもしれない間接テストを好む。

あなたはプライベートメソッドをテストするためpowermock Whitebox.invokeMethod()を使用することができます戻るあなたの質問に

。その構文は

WhiteboxImpl.invokeMethod(<class object>, “<Name of the private Method>",input param1, input param2,…); 
+1

私はこのテストが動作を変更する*実装*を変更した*リファクタリング*中に通常中断する可能性があるので、プライベートメソッドをテストしないことをサポートします。しかし、UnitTestsは、リファクタリング中に安全なガードを行うために、ユニット*の動作*が変更された場合にのみ、ブレーキをかけなければなりません。 –

関連する問題