有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

工厂所在地为javax.xml.soap.SOAPConnectionFactory

我不在乎任何回复,但我希望能够验证发送的消息。代码将被重构,我希望确保它在之后发送与之前相同的消息

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    在代码中使用新类的对象

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

    然后,在测试中,用模拟对象替换工厂,工厂将返回模拟连接。在模拟连接上设置期望值,以期待您正在寻找的呼叫

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