Mockito:How to mock method called inside another method

匿名 (未验证) 提交于 2019-12-03 01:22:02

问题:

I am new to mockito and I am using mockito to test method which is calling another method and called method returns string. I tried but I am unable write test. Please help

public class MyClass {   protected String processIncominData(String input) {     String request = ...;     ...     String response = forwardRequest(request);     ...     return response;   }    public String forwardRequest(String requestToSocket) {    String hostname = socketServerName;     int port = socketServerPort;     String responseLine=null;     Socket clientSocket = null;       PrintStream outs=null;      BufferedReader is = null;     BufferedWriter bwriter=null;      try {         clientSocket = new Socket(hostname, port);         outs=new PrintStream(clientSocket.getOutputStream());         is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));         bwriter = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));      } catch (UnknownHostException e) {         LOGGER.error("Don't know about host: " + hostname + e.getMessage());     } catch (IOException e) {         LOGGER.error("Couldn't get I/O for the connection to: " + hostname + e.getMessage());     }      if (clientSocket == null || outs == null || is == null) {         LOGGER.error("Something is wrong. One variable is null.");     }     try {         while ( true ) {             StringBuilder sb = new StringBuilder();             sb.append(requestToSocket);              String  request = sb.toString().trim();             bwriter.write(request);             bwriter.write("\r\n");             bwriter.flush();             responseLine = is.readLine();             LOGGER.info("Socket returns : " + responseLine);             //outs.println(responseLine);             bwriter.close();         }     } catch (UnknownHostException e) {         LOGGER.error("Trying to connect to unknown host: "+ e.getMessage());     } catch (IOException e) {         LOGGER.error("IOException:  "+ e.getMessage());     }     finally{         try {             outs.close();             is.close();             clientSocket.close();          } catch (IOException e) {             e.printStackTrace();         }      }     return responseLine;   } } 

I want to mock xml response here to test processIncomingData method..This response is coming from socket server and I am sending request by socket client. I think socket will not matter if I can mock xmlResponse from socket. Please give any helpful answer

回答1:

Now that you have posted it, the answer to how to mock it is here.

testing-java-sockets



回答2:

You can try the spy method:

MyClass myClass = spy(new MyClass()); when(myClass.forwardRequest("foo")).thenReturn("bar"); 

then when you call

myClass.processIncominData("baz"); 

the response will be "bar" (if request is "foo")

PS: When you need to mock class under test it shows some problem with your design.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!