2017-05-29 18 views
1

私のテストメソッドからgetHSMDecryptedDataメソッドを呼び出すと、ここでレスポンスオブジェクトをモックしたいです。メソッドでオブジェクトをモックする方法

private String getHSMDecryptedData(String keysetName, int groupIndex, 
            String ksn, String encryptedData) { 
    String decryptedData = null; 
    try { 
     DecryptData decrypt = new DecryptData(); 
     decrypt.setKeySet(keysetName); 
     decrypt.setKsnDescriptor("906"); 
     decrypt.setKsn(ksn); 
     decrypt.setKeyType(HSMKeyTypeDataModel.TYPE_BDK); 
     decrypt.setEncryptionMode(HSMEncryptionMode.CBC); 
     decrypt.setInputFormat(HSMDataFormat.HEX_ENCODED_BINARY); 
     decrypt.setOutputFormat(HSMDataFormat.HEX_ENCODED_BINARY); 
     decrypt.setMessage(encryptedData); 

     // sending M2 command to HSM for decryption of encrypted data coming from CP 
     DecryptDataResponse response = (DecryptDataResponse) HSMService.getInstance().processRequest(decrypt); 

     System.out.println(response+"***************reponse"); 
     if (response != null && response.getResponseCode() == HSMResponseCodes.APPROVED) { 
      decryptedData = response.getDecryptedMessage(); 
      TraceLog.Info(getClass(), 
       "Message decrypted[" + decryptedData + "], original input[" + encryptedData + "], replacing original encrypted data!"); 
      if (decryptedData == null) { 
      // throw new FirstadatException("Unable to get the decrypted Data from HSM "); 
      } 
     }//FirstadatException 

これは私の試験方法である:

HsmDataDecrypt hsmDataDecrypt = new HsmDataDecrypt(); 
    try { 
     DecryptDataResponse response=mock(DecryptDataResponse.class); 
     //response. 
     Method method = hsmDataDecrypt.getClass().getDeclaredMethod("getHSMDecryptedData", String.class,int.class,String.class,String.class); 
+0

静的メソッド呼び出しをモックすることができるため、PowerMockが問題を解決できる可能性があります。 ** Do not!**あなたのコードが悪いので、あなたが持つ問題のための悪い解決策です。 Timothyの話を聞くと、依存関係の注入が問題を解決し、コードを素早く整理し、PowerMockは本当の問題だけを隠すことができます。 –

+0

yup thanks ...... –

答えて

2
DecryptDataResponse response = (DecryptDataResponse) HSMService.getInstance().processRequest(decrypt); 

あなたはのJava Singletonパターン経由HSMServiceオブジェクトにアクセスします。シングルトンのこの種のは、基本的には、ソフトウェア開発者は、80年代後半以降であること悪を考えるグローバル変数 ...コンストラクタのパラメータとしてHSMServiceオブジェクト好ましく

あなたをより良い注入またはその他の依存性注入技術です。 その場合、HSMServiceオブジェクトをメソッドの呼び出しでDecryptDataResponseクラスのモックを返すモックに置き換えることができます。

+0

あなたの提案に感謝します。私はHSMServiceオブジェクトを注入するコンストラクタを作成し、それに応じて変更を加えました。ありがとう。 –

関連する問題