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