Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟spring消息上下文_Java_Spring_Unit Testing_Junit_Mockito - Fatal编程技术网

Java 模拟spring消息上下文

Java 模拟spring消息上下文,java,spring,unit-testing,junit,mockito,Java,Spring,Unit Testing,Junit,Mockito,我想嘲笑这些方法: SaajSoapMessage saajSoapMessage = (SaajSoapMessage) messageContext.getRequest(); SoapBody requestBody = saajSoapMessage.getSoapBody(); 我用这个试过了 messageContextMock = mock(MessageContext.class); saajSoapMessageMock = mock(SaajSoapMessage.clas

我想嘲笑这些方法:

SaajSoapMessage saajSoapMessage = (SaajSoapMessage) messageContext.getRequest();
SoapBody requestBody = saajSoapMessage.getSoapBody();
我用这个试过了

messageContextMock = mock(MessageContext.class);
saajSoapMessageMock = mock(SaajSoapMessage.class);

when(messageContextMock.getRequest()).thenReturn((SaajSoapMessage) saajSoapMessageMock);
when(saajSoapMessageMock.getSoapBody()).thenReturn(soapBodyMock);
但是我在模仿
getSoapBody()
时遇到了问题,因为Junit写了我:

at org.springframework.ws.soap.AbstractSoapMessage.getSoapBody(AbstractSoapMessage.java:36)
如何正确模拟此操作

编辑(完整堆栈):


尝试将实体添加到模拟对象,尝试以下操作:

messageContextMock = mock(MessageContext.class);

saajSoapMessageMock = mock(SaajSoapMessage.class);
soapEnvelopeMock = mock(SOAPEnvelope.class);

when(saajSoapMessageMock.getEnvelope()).thenReturn(soapEnvelopeMock);
when(messageContextMock.getRequest()).thenReturn(saajSoapMessageMock);

你能不能把整个堆栈的跟踪,而不是一行请?还是一样的。我使用了:
messageContextMock=mock(MessageContext.class);saajSoapMessageMock=mock(SaajSoapMessage.class);soapMessageMock=mock(SOAPMessage.class);soapBodyMock=mock(SOAPBody.class);当(soapMessageMock.getSOAPBody())。然后返回(soapBodyMock);when(saajSoapMessageMock.getSaajMessage()).thenReturn(soapMessageMock);when(messageContextMock.getRequest()).thenReturn(saajSoapMessageMock);当(soapMessageMock.getSOAPBody())。然后返回(soapBodyMock)我的答案中有一个错误,我在两个不同的模拟上模拟getSoapBody()的返回,其中一个是错误的。我不知道这是否会影响你的结果,但可能值得一试。得到一个像你这样的空指针表明有些东西没有被正确地模仿。调试测试代码并查看创建的模拟对象。查看SaajSoapMessage->SOAPMessage->SOAPBody的路径,这些路径中是否有null?因此,null指针位于以下代码中:`/**返回
getEnvelope().getBody()
*/public final SoapBody getSoapBody(){return getEnvelope().getBody();}`null是信封,implementationnion,messageFactory,saajMessageI已经在答案中添加了一些模拟,这次它应该模拟SOAPEnvelope,以及用于从SOAPMessage获取信封的SOAPPart类。不幸的是,同样的。但对于您的信息,saajSoapMessageMock只有getSaajMessage方法,没有getSoapMessage方法。
messageContextMock = mock(MessageContext.class);

saajSoapMessageMock = mock(SaajSoapMessage.class);
soapEnvelopeMock = mock(SOAPEnvelope.class);

when(saajSoapMessageMock.getEnvelope()).thenReturn(soapEnvelopeMock);
when(messageContextMock.getRequest()).thenReturn(saajSoapMessageMock);