【问题标题】:How can I unit test code that sends a SOAP web-service request?如何对发送 SOAP Web 服务请求的代码进行单元测试?
【发布时间】:2010-09-13 15:40:03
【问题描述】:

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

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

工厂是javax.xml.soap.SOAPConnectionFactory

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

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

【问题讨论】:

  • 当您说“验证发送的消息”时,您实际上是希望确保某个请求通过网络发送到某个远程服务还是只是“conn.call(message, endpoint )" 方法被调用了吗?
  • @Angelo 我想分析调用 conn.call 发送的结果消息。检查它的内容并在测试中对它做出断言。我们将来可能会使用不同的方式/库来发送。

标签: java web-services unit-testing axis


【解决方案1】:

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

【讨论】:

  • 这听起来像我想要的,我会检查一下并在这里报告。
  • 谢谢,我已经添加了自己的答案,并在其中解释了为什么我选择码头而不是针对我的特殊情况。
【解决方案2】:

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

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

【讨论】:

  • 谢谢,但我想在不同级别进行测试,我希望实际连接创建它将发送的任何 HTTP SOAP 请求,然后我想验证其内容。
  • 啊。你当时不是在测试 SOAPConnection 的实现而不是你的代码吗?
  • 我正在测试代码实际发送到 Web 服务的内容。我想确保如果代码发生更改,即使正在使用的库(轴)也会发送相同的请求。我知道理想情况下每个类都应该以更精细的粒度进行测试,但时间不允许这样做。
  • 听起来 WSUnit 就是你想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
相关资源
最近更新 更多