Как я могу выполнить модульный тестовый код, который отправляет запрос веб-службы SOAP? - PullRequest
4 голосов
/ 13 сентября 2010

Я хочу написать модульный тест для некоторого кода, который генерирует сообщение SOAP с вложением и отправляет его:

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

, где фабрика является javax.xml.soap.SOAPConnectionFactory

Я надеваюЯ не хочу получать ответ, но я хочу иметь возможность проверить сообщение, которое будет отправлено.Код будет подвергнут рефакторингу, и я хочу убедиться, что он отправляет те же сообщения впоследствии, как и раньше.

Существует ли инфраструктура, которую я могу использовать для создания фиктивной конечной точки, которая позволит мне анализировать запрос в моем тесте?Если так, то некоторый пример кода будет очень полезен.

Ответы [ 2 ]

4 голосов
/ 13 сентября 2010

Существует проект java.net с именем WSUnit , который должен помочь. По сути, это сервлет слушателя, который слушает сообщения. Вы можете отправлять ему сообщения и проверять содержимое сообщения с помощью XMLUnit.

2 голосов
/ 13 сентября 2010

Использование JMock . JMock позволяет вам проверять поведение, а не изменения состояния. Чтобы сделать это, вам нужно инкапсулировать метод SOAPCOnnectionFactory.newInstance () в объекте, из которого состоит:

public class MySOAPConnectionFactory {

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

Используйте объект нового класса в вашем коде.

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

Затем, в вашем тесте, замените объект Mock на Factory, который вернет Mock Connection. Установите ожидания для 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);
        }
        } );
...