如何对发送SOAP Web服务请求的代码进行单元测试?

时间:2010-09-13 15:40:04

标签: java web-services unit-testing axis

我想为一些生成带有附件的SOAP消息并发送它的代码编写单元测试:

SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
conn = factory.createConnection();
conn.call(message, endpoint);

工厂为javax.xml.soap.SOAPConnectionFactory

我不关心任何回复,但我希望能够验证发送的消息。代码将被重构,我想确保它像以前一样发送相同的消息。

是否有一个框架我可以用来创建一个模拟端点,让我在测试中分析请求?如果是这样,一些示例代码将非常有用。

2 个答案:

答案 0 :(得分:4)

有一个名为WSUnit的java.net项目应该有所帮助。它基本上是一个监听消息的监听器servlet。您可以使用XMLUnit向其发送消息并验证消息的内容。

答案 1 :(得分:2)

使用JMock。 JMock允许您测试行为而不是状态更改。为此,您需要将SOAPCOnnectionFactory.newInstance()方法封装在diffent对象中:

public class MySOAPConnectionFactory {

    public SOAPConnectionFactory getConnection() {
        return SOAPConnectionFactory.newInstance();
}

在代码中使用新类的对象。

conn = mySOAPConnectionFactory.getConnection();
conn.call( message, endpoint );

然后,在您的测试中,将Mock对象替换为Factory,这将返回模拟连接。设定对Mock Connection的期望,期待你正在寻找的电话。

final SOAPConnectionFactory mockConnection = mockery.mock(SOAPConnectionFactory.class);
final SOAPConnection mockSoapConnection = mockery.mock(SOAPConnection.class);
foo.setMySOAPConnectionFactory( mockConnectionFactory );
try {
        mockery.checking( new Expectations() {

        {
            atLeast( 1 ).of( mockConnectionFactory ).getConnection();
            will( returnValue( mockSoapConnection ) );
            atLeast( 1 ).of( mockConnection ).call(SOME_MESSAGE, ENDPOINT);
        }
        } );
相关问题