2014-06-09 3 views
0

서버가 문자열을 반환하는지 테스트하려고합니다. 그러나 실제로 서버에 연결하지 않고 테스트하고 싶습니다. 나는 서버를 조롱해서 java.net.SocketException을 제거하려고 노력하고있다. 어떤 접근 방식을 취해야합니까?Mockito를 사용하여 서버 모의 시도

아래 코드는 서버에 필요한 모든 값을 선언합니다.

@RunWith(MockitoJUnitRunner.class) 
public class testTransfer { 



@Test 
public void getServerMessage() { 
    //variables 
    String serverhostname = "serverA"; 
    int portNo = 8888; 
    int versionNo = 9999; 
    String protocol = "tcp"; 
    String serverInput = "input string"; 

    String url = "http://localhost:8080/server/url"; 


    Service service =new Service(); 
    Call call = Mockito.mock(Call.class); 
    server_string result = Mockito.mock(server_string.class); 

아래 코드는 서버를 호출하고 XML 내부에 값을 추가합니다.

//try catch 
     try { 

     call=(Call)service.createCall(); 
     QName qn = new QName("urn:ServerApiService", "server_string"); 
     call.registerTypeMapping(server_string.class, qn, 
       new org.apache.axis.encoding.ser.BeanSerializerFactory(server_string.class, qn), 
       new org.apache.axis.encoding.ser.BeanDeserializerFactory(server_string.class, qn)); 

     call.setTargetEndpointAddress(new java.net.URL(url)); 
     call.addParameter("arg1", XMLType.XSD_STRING, ParameterMode.IN); 
     call.addParameter("arg2", XMLType.XSD_INT, ParameterMode.IN); 
     call.addParameter("arg3", XMLType.XSD_INT, ParameterMode.IN); 
     call.addParameter("arg4", XMLType.XSD_STRING, ParameterMode.IN); 
     call.addParameter("arg5", XMLType.XSD_STRING, ParameterMode.IN); 
     call.addParameter("arg6", qn, ParameterMode.OUT); 
     call.setOperationName(new QName(url, "getServerMessage")); 
     call.setReturnClass(server_string.class); 
     //result = (server_string) call.invoke(new Object[] {serverhostname,portNo,versionNo,protocol,serverInput}); 
     result = (server_string) Mockito.when(call.invoke(new Object[] {serverhostname,portNo,versionNo,protocol,serverInput})).thenReturn(server_string.class); 
     System.out.println("Get server_string object from server ...."); 
        // System.out.println("Value is "+result.value); 
    } catch (ServiceException e) { 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 


} 

} 

그러나, 나는이

AxisFault 
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException 
faultSubcode: 
faultString: java.net.SocketException: Connection reset 
faultActor: 
faultNode: 
faultDetail: 
    {http://xml.apache.org/axis/}stackTrace:java.net.SocketException: Connection reset 
+0

실제로 테스트하는 것은 무엇입니까? 결과를 서버에서 조롱하려고하십니까? 여기에는 많은 상호 의존적 인 코드가 있기 때문에, 나는 당신이 테스트하려고하는 것이 무엇인지 100 % 명확하지 않습니다. – Makoto

+0

@Makoto 예, 서버에서 결과를 다시 조롱하려고합니다. – user3720852

답변

1

가 계속 나는 좋은 효과를 wiremock을 사용했다. 이 작업을 위해 조롱하는 프레임 워크입니다.

0

또한 JBoss를 사용하여 프로젝트를 실행할 수도 있습니다. 서버를 조롱 할 때 @ 보헤미안이 말한 것을 사용하는 것이 훨씬 쉽기 때문에 사용해야합니다. 그러나 학습 곡선이 높고 응급 상황에 권장되지 않습니다 (저는 초보자입니다).