使用Mockito模拟服务器
问题描述:
我想测试服务器是否会返回字符串。但是,我想测试它而不实际连接到服务器。我试图摆脱通过嘲笑服务器的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
答
您也可以使用JBoss并运行该项目。当嘲笑服务器时,你需要使用@Bohemian所说的内容,因为它更容易。然而,学习曲线很高,不建议在紧急情况下(我是一个新手btw)。
你在测试什么?你是否试图嘲笑服务器的结果?这里有很多相互依赖的代码,所以我不能100%清楚你想要测试的是什么。 – Makoto
@Makoto是的,我试图从服务器嘲笑结果。 – user3720852