欢迎指出我代码中的任何错误,因为这是我第一次使用SOAP和单元测试。
我有一个简单的SoapService
,它创建SOAPConnection
并发送SOAPMessage
- SOAP服务. java**
public SOAPMessage sendSoapRequest(String url, String requestString) throws IOException, SOAPException {
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection= soapConnectionFactory.createConnection();
SOAPResponse soapResponse = soapConnection.call(getSoapMessage(requestString), url);
soapConnection.close();
return soapResponse;
}
我有sendSoapRequest
的单元测试类
- SOAP服务测试. java**
@SpringBootTest
@RunWith(SpringRunner.class)
public class SoapServiceTest {
@Autowired
SoapService soapService;
@Mock
SOAPConnection mockSoapConnection;
private SOAPMessage mockSoapResponse = mock(SOAPMessage.class);
@Test
public void testSendSoapMessage() throws IOException, SOAPException{
when(mockSoapConnection.call(any(SOAPMessage.class), anyString())).thenReturn(mockSoapResponse);
SOAPMessage soapResponse = soapService.sendSoapRequest("http://test.com/test.asmx", "SampleSoapRequestString...");
Assert.assertNotNull(soapResponse);
Assert.assertEquals(soapResponse,mockSoapResponse);
}
}
参考代码when(mockSoapConnection.call(any(SOAPMessage.class),anyString())).thenReturn(mockSoapResponse);
它应该返回mockSoapResponse
,但它没有返回,它实际上试图在到达此行时将SOAPMessage
发送到虚拟url "http://test.com/test.asmx"
SOAPResponse soapResponse = soapConnection.call(getSoapMessage(requestString), url);
.
所以我的问题是
1.对"sendSoapRequest"进行单元测试的正确方法是什么?
1.这是模拟SOAPConnection
并使用Mockito.when
定义行为的正确方法吗?
1.我是否错过了模拟中的任何设置/配置?
我发现了一个相关问题,但它没有显示完整的设置:Java - Mocking soap call with SOAPMessage request
感谢您的任何意见/想法/指导,因为我真的不知道得到这个工作。谢谢。
1条答案
按热度按时间vlf7wbxs1#
您正在模拟的SOAPConnection不是您的方法中的SOAPConnection,这就是您所期望的结果没有发生的原因。
更详细地说,我认为您要测试的行在文档中是众所周知的,因此测试它们并不那么重要,更重要的是测试输入数据处理以成为您的调用的输入(在您的情况下为getSoapMessage(requestString))和输出数据处理,以成为调用者期望的输出(在您的例子中没有操作,但是也许您应该做一些事情来返回“使用客户端语言”的内容)。
调用的逻辑可以在“对方”的代码中进行测试。
最后,如果你想有一个更好的代码,你可以隔离所有的soap相关的行在一个合作者和模拟它,以测试输入和输出处理。