2017-09-25 7 views
0

Salut tout le monde je suis en train de se moquer d'une méthode privée qui prend le type de liste en tant que paramètre Une partie des détails du code suivent:Comment se moquer d'une méthode privée qui prend le type Liste en paramètre en utilisant Power Mock?

CustomerVerification Classe

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 classe

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; 
    } 

Quelqu'un peut-il me donner juste une idée sur la façon de se moquer méthode privée executeCreditCheck qui prend 3 paramètres parmi lesquels un est le type Liste.

Note: J'ai donné juste une partie du code ici. S'il vous plaît, quelqu'un donne moi une idée sur la façon de simuler la méthode executeCreditCheck.

+0

A) vous vous intéressez à l'utilisation d'espions ici. B) Fondamentalement, vous avez un code difficile à tester ici. Plutôt que de faire en sorte que cela soit testé, prenez plutôt du recul et réfléchissez à des moyens d'améliorer votre conception ... pour que cela devienne plus facile à tester. – GhostCat

Répondre

1

Il ya un énorme débat sur la météo pour tester la méthode privée pas ou comment tester. Personnellement, je ne teste pas directement la méthode privée. Il y aurait une méthode publique qui appelle la méthode privée et je préfère les tests indirects que je pourrais faire mal.

Retour à votre question,

vous pouvez utiliser powermock Whitebox.invokeMethod() pour tester des méthodes privées. Sa syntaxe est

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

Je supporte votre point de ne pas tester les méthodes privées car ce test peut généralement se casser pendant * refactorings * où vous avez modifié le * implelentation * sans changer le comportement. Mais UnitTests ne doit freiner que si le comportement * des unités * change afin d'être un gardien sûr pendant les refactorings. –