2017-05-29 135 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可以解决您的问题,因为它允许您模拟静态方法调用。 **不要!**这是一个糟糕的解决方案,因为你的代码不好,所以只有这个问题。听蒂莫西,依赖注入将很好地解决你的问题并清理你的代码,而PowerMock只会让你隐藏真正的问题。 –

+0

yup谢谢...... –

回答

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

您通过的Java Singleton模式访问HSMService对象。这种单身基本都是全局变量其软件开发人员认为80年代末期以来被邪恶......

你最好注入HSMService物体最好的构造函数的参数或任何其他依赖注入技术。 在这种情况下,您可以用模拟替换HSMService对象,然后返回DecryptDataResponse类的模拟,并调用processRequest方法。

+0

感谢您的建议,我通过创建注入HSMService对象的构造函数进行相应的更改,现在它嘲笑响应。谢谢。 –

相关问题